int i = 2;
int *p = &i;
int *q = p; // 認為 q 存儲 p 的地址
printf("*q=%d q=%d\n", *q, q); // 期望 q 輸出 p 的地址
int *p:p 是變量,類型「指向 int 的指針」,存儲 int 變量的地址。p = &i:將 i 的地址存入 p。int *q = p:定義 q 同類型指針,將 p 的值(即 i 的地址)賦給 q。此時 p 和 q 都指向 i。*q 等價於 i,輸出 2。q 輸出 i 的地址,與 p 相同。
int **q = &p; // 二級指針,存儲 p 變量的地址
printf("**q = %d\n", **q); // 2
i (地址 0x1000, 值 2)
p (地址 0x2000, 值 0x1000) --> 指向 i
q (地址 0x2008, 值 0x1000) --> 也指向 i
// q 的值是 0x1000,而非 0x2000