int r = 50;
int *p;
int **k;
int ***m;
printf( "r: %d ", r );
p = &r;
k = &p;
m = &k;
***m = 100; //line 9
printf( "r: %d\n", r );
当只有一个指针时,我可以理解我们取100并将它分配给指针所持有的地址处的变量。但是,当我们使用多个指针级别执行此操作时,究竟会发生什么? (第9行)
答案 0 :(得分:1)
指针到指针的工作原理是指针也是一个变量。它只存储地址。因此,指向指针的指针是包含地址的变量的地址。
在此图中,v
是变量,包含100.其地址为1000. ptr
包含v
的地址,即1000. pptr
包含地址ptr
,即720。
答案 1 :(得分:1)
int *p=&r
:p
是pointer-to-int
,需要address of r
。
int **k=&p
:k
是pointer-to-( pointer-to-int )
,需要address of p
。
int ***m=&k
:m
是pointer-to-( pointer-to-( pointer-to-int ) )
,需要address of k
。
当你执行***m = 100
时,你正在“解开”指针,最后你最终得到int
。
答案 2 :(得分:-4)