#include
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 → "Aliyun" |
char **b = &a; | b 指向變數 a | b → a → "Aliyun" |
*b = "programming test"; | 解引用 b 即 a,指向新常量 | a → "programming test" |
char *c = ++a; | a 先自增(指向 'r'),c 指向 'r' | a → "rogramming test", c → "rogramming test" |
a = "talents."; | a 指向新常量,c 不受影響 | a → "talents.", c → "rogramming test" |
printf("%c", *++c); | c 自增指向 'o',輸出 'o' | 輸出 o |
char **b = &a:b 是指向指標的指標,存儲 a 的地址。*b = ... 修改的是 a 的值(地址),不影響 b 本身。++a 是指標算術:a 移向下一個 char(+1 字節)。c 複製的是 ++a 後的地址,後續 a 變更不影響 c。*++c:先移動 c,再解引用取字符。GCC 編譯運行輸出 o,與分析一致。
指標的指標 與 二維數組。char* +1 字節,int* +4 字節)。++p 先增後用,後綴 p++ 先用後增。