看板 C_and_CPP 關於我們 聯絡資訊
#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://www.ptt.cc/bbs/C_and_CPP/M.1574601323.A.FD9.html
cuteSquirrel: https://ideone.com/Jk2h3N 11/24 21:24
cuteSquirrel: print 出來或者畫出概念圖會比較好理解 11/24 21:24
pujols05: https://imgur.com/a/nulQDKX 11/24 22:01
pujols05: 如上圖, 不太清楚為何更動*ptr的值為何會改到localPtr 11/24 22:03
cuteSquirrel: localPtr 是一個指向整數的指標 11/24 22:09
cuteSquirrel: changePtr 的參數 ptr 是 指向(整數的指標)的指標 11/24 22:10
cuteSquirrel: 理解為 指向(localPtr)的指標 11/24 22:11
cuteSquirrel: 在changePtr內部 節由ptr把 localPtr 改指向 value 11/24 22:12
cuteSquirrel: 可以參考版上或google關於雙重指標的討論 11/24 22:12
cuteSquirrel: ^藉由 11/24 22:12
testPtt: **ptr is &localPtr=>*ptr is localPtr=>localPtr=&value 11/24 23:11
cuteSquirrel: 推樓上的說明 11/24 23:26
kaneson: 新手比較容易弄混的是宣告時的* 與變數存取時的* 沒有分 11/25 09:25
kaneson: 清楚 11/25 09:25
kaneson: 簡單說除了宣告時是聲明指標以外, 平時*ptr的*是指做一 11/25 09:33
kaneson: 個dereference的動作 11/25 09:33
kaneson: 所以已知ptr是int**,對ptr裡面的內容做一次dereference( 11/25 09:44
kaneson: 實際就變成了main 的 localPtr), 同時也已知進行一次dere 11/25 09:44
kaneson: ference後是int*, 所以這裡可以合法assign一個address(也 11/25 09:44
kaneson: 就是assign給localPtr) 11/25 09:44
pujols05: 感謝各位 11/25 22:28