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