繁体   English   中英

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

[英]How does a pointer of pointer work in this C code?

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

int *p=&r : ppointer-to-intpointer-to-int ,它采用address of raddress of r

int **k=&p : kpointer-to-( pointer-to-int ) ,它采用address of paddress of p

int ***m=&k : mpointer-to-( pointer-to-( pointer-to-int ) ) ,它采用address of kaddress of k

当您执行***m = 100 ,您正在“解包”指针,最后您只得到int

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

在此处输入图片说明

在该图中v是可变的,含有100及其地址是1000。 ptr包含的地址v ,这是1000 pptr包含的ADDRES ptr ,这是720。

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

看看图片

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM