[問題] 指標的指標

作者: 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