PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 指标的指标
楼主:
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/Jk2h3N
print 出来或者画出概念图会比较好理解
楼主:
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
感谢各位
继续阅读
[问题] 前向星
asps5711
[问题]数值无法放入阵列
samsandy
[问题] C语言教学手册第四版(已征到)
pray5566
[问题] vs2017grpc ptotobuf范例编译一直不过
OfficeGL
[问题]printf 输出问题
samsandy
[问题] DLL的标头档组建出问题
makkapakka
[问题] 怎么让小圆点斜著移动?
makkapakka
[问题] UVA245 Wrong answer
linwebs
[问题] UVA10003
a567896666
[问题]使用WTS来查询使用者登入的资讯
jayzhuang
Links
booklink
Contact Us: admin [ a t ] ucptt.com