指向指針的指針,常用於:函數修改一級指針值、動態分配二維數組、命令行參數 char** argv。
int i = 0;
int *p = &i;
int **pp = &p;
**pp = 100; // 修改 i
printf("i=%d\n", i); // 100
i (int) 地址: 0x7ffe... 值: 100
p (int*) 地址: 0x7ffe... 值: &i
pp (int**) 地址: 0x7ffe... 值: &p
*pp = p = &i
**pp = *p = i
每級指針大小相同(64 位 8 字節),區別在於解引用層數與指向類型。
int ***ppp = &pp;
***ppp = 200; // 同樣修改 i
// 實際工程中超過二級極少見,邏輯極難維護
#include <stdio.h>
int main() {
int i = 0;
int *p = &i;
int **pp = &p;
int ***ppp = &pp;
**pp = 100;
printf("i = %d\n", i);
printf("&i = %p\n", &i);
printf("p = %p\n", p);
printf("&p = %p\n", &p);
printf("pp = %p\n", pp);
printf("&pp = %p\n", &pp);
printf("*pp = %p\n", *pp);
printf("**pp = %d\n", **pp);
printf("ppp = %p, *ppp = %p\n", ppp, *ppp);
return 0;
}
i = 100
&i = 0x7ffd1234567c
p = 0x7ffd1234567c
&p = 0x7ffd12345670
pp = 0x7ffd12345670
&pp = 0x7ffd12345668
*pp = 0x7ffd1234567c
**pp = 100
ppp = 0x7ffd12345668, *ppp = 0x7ffd12345670
T *p 指向 T;T **pp 指向 T*;以此類推。*)。