指针指针如何在这个C代码中工作?

时间:2016-03-13 17:39:00

标签: c pointers

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行)

3 个答案:

答案 0 :(得分:1)

指针到指针的工作原理是指针也是一个变量。它只存储地址。因此,指向指针的指针是包含地址的变量的地址。

enter image description here

在此图中,v是变量,包含100.其地址为1000. ptr包含v的地址,即1000. pptr包含地址ptr,即720。

答案 1 :(得分:1)

int *p=&rppointer-to-int,需要address of r

int **k=&pkpointer-to-( pointer-to-int ),需要address of p

int ***m=&kmpointer-to-( pointer-to-( pointer-to-int ) ),需要address of k

当你执行***m = 100时,你正在“解开”指针,最后你最终得到int

答案 2 :(得分:-4)

指向指针或多行指针的指针r的地址传递给指针p时! 然后,如果您将p的地址传递给另一个指针k,那么为了解除引用实际值,您需要取消引用它两次以获得实际值r,依此类推。

查看图片

enter image description here