#include <stdio.h>
int main() {
char *a = "Aliyun";
char **b = &a;
*b = "programming test";
char *c = ++a;
a = "talents.";
printf("%c\n", *++c);
return 0;
}
問輸出為何?
char *a = "Aliyun";:宣告指標變數 a,指向常量字串 "Aliyun"。a 存放該字串的地址。char **b = &a;:宣告指標的指標 b,實際上 b 仍是指標,指向的變數是指標 a。b 存放 a 的地址(而非 a 的值)。指標型變數永遠存放地址(不含 NULL)。*b = "programming test";:* 為解引用運算子,取得 b 指向的內容。此處 *b 即 a。等價於 a = "programming test";,使指標 a 指向新字串 "programming test"。注意:指標直接賦值字串時,是將字串地址賦給指標。char *c = ++a;:此時 a 的值為字串 "programming test" 首字元 'p' 的地址。++a 先自增,使 a 指向下一字元 'r',並將此地址賦給 c。故 c 指向 'r'。a = "talents.";:此為干擾行,c 與 a 無關。printf("%c\n", *++c);:++c 使 c 指向下一字元 'o',解引用輸出該字元。因此輸出為字元 o。
在 Ubuntu 下使用 GCC 驗證成功。