[问题] 指标的指标

楼主: pujols05 (qq)   2019-11-24 21:15:21
#include<stdio.h>
int value=0;
void changePtr(int **ptr)
{
*ptr=&value;
}
int main()
{
int localValue=1;
int *localPtr=&localValue;
changePtr(&localPtr);
printf("%d\n",*localPtr);
return 0;
}
请问各位, *ptr=&value 这行为什么有办法改变localPtr的值?
*ptr的值应该是localPtr的位址, *ptr重新指向一个位址就可以改变localPtr的值?
不是很理解这行的意思
谢谢
作者: cuteSquirrel (松鼠)   2019-11-24 21:24:00
https://ideone.com/Jk2h3Nprint 出来或者画出概念图会比较好理解
楼主: pujols05 (qq)   2019-11-24 22:01:00
https://imgur.com/a/nulQDKX如上图, 不太清楚为何更动*ptr的值为何会改到localPtr
作者: cuteSquirrel (松鼠)   2019-11-24 22:09:00
localPtr 是一个指向整数的指标changePtr 的参数 ptr 是 指向(整数的指标)的指标理解为 指向(localPtr)的指标在changePtr内部 节由ptr把 localPtr 改指向 value可以参考版上或google关于双重指标的讨论^借由
作者: testPtt (测试)   2019-11-24 23:11:00
**ptr is &localPtr=>*ptr is localPtr=>localPtr=&value
作者: cuteSquirrel (松鼠)   2019-11-24 23:26:00
推楼上的说明
作者: kaneson (Lance)   2019-11-25 09:25:00
新手比较容易弄混的是宣告时的* 与变量存取时的* 没有分清楚简单说除了宣告时是声明指标以外, 平时*ptr的*是指做一个dereference的动作所以已知ptr是int**,对ptr里面的内容做一次dereference(实际就变成了main 的 localPtr), 同时也已知进行一次dereference后是int*, 所以这里可以合法assign一个address(也就是assign给localPtr)
楼主: pujols05 (qq)   2019-11-25 22:28:00
感谢各位

Links booklink

Contact Us: admin [ a t ] ucptt.com