作者pujols05 (qq)
看板C_and_CPP
标题[问题] 指标的指标
时间Sun Nov 24 21:15:21 2019
#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的值?
不是很理解这行的意思
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.233.170.6 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1574601323.A.FD9.html
2F:→ cuteSquirrel: print 出来或者画出概念图会比较好理解 11/24 21:24
4F:→ pujols05: 如上图, 不太清楚为何更动*ptr的值为何会改到localPtr 11/24 22:03
5F:推 cuteSquirrel: localPtr 是一个指向整数的指标 11/24 22:09
6F:→ cuteSquirrel: changePtr 的参数 ptr 是 指向(整数的指标)的指标 11/24 22:10
7F:→ cuteSquirrel: 理解为 指向(localPtr)的指标 11/24 22:11
8F:→ cuteSquirrel: 在changePtr内部 节由ptr把 localPtr 改指向 value 11/24 22:12
9F:→ cuteSquirrel: 可以参考版上或google关於双重指标的讨论 11/24 22:12
10F:→ cuteSquirrel: ^藉由 11/24 22:12
11F:→ testPtt: **ptr is &localPtr=>*ptr is localPtr=>localPtr=&value 11/24 23:11
12F:推 cuteSquirrel: 推楼上的说明 11/24 23:26
13F:推 kaneson: 新手比较容易弄混的是宣告时的* 与变数存取时的* 没有分 11/25 09:25
14F:→ kaneson: 清楚 11/25 09:25
15F:推 kaneson: 简单说除了宣告时是声明指标以外, 平时*ptr的*是指做一 11/25 09:33
16F:→ kaneson: 个dereference的动作 11/25 09:33
17F:推 kaneson: 所以已知ptr是int**,对ptr里面的内容做一次dereference( 11/25 09:44
18F:→ kaneson: 实际就变成了main 的 localPtr), 同时也已知进行一次dere 11/25 09:44
19F:→ kaneson: ference後是int*, 所以这里可以合法assign一个address(也 11/25 09:44
20F:→ kaneson: 就是assign给localPtr) 11/25 09:44
21F:→ pujols05: 感谢各位 11/25 22:28