[問題] 指標的指標

看板C_and_CPP作者 (qq)時間4年前 (2019/11/24 21:15), 編輯推噓6(6015)
留言21則, 4人參與, 4年前最新討論串3/3 (看更多)
#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

11/24 21:24, 4年前 , 1F

11/24 21:24, 4年前 , 2F
print 出來或者畫出概念圖會比較好理解
11/24 21:24, 2F

11/24 22:01, 4年前 , 3F

11/24 22:03, 4年前 , 4F
如上圖, 不太清楚為何更動*ptr的值為何會改到localPtr
11/24 22:03, 4F

11/24 22:09, 4年前 , 5F
localPtr 是一個指向整數的指標
11/24 22:09, 5F

11/24 22:10, 4年前 , 6F
changePtr 的參數 ptr 是 指向(整數的指標)的指標
11/24 22:10, 6F

11/24 22:11, 4年前 , 7F
理解為 指向(localPtr)的指標
11/24 22:11, 7F

11/24 22:12, 4年前 , 8F
在changePtr內部 節由ptr把 localPtr 改指向 value
11/24 22:12, 8F

11/24 22:12, 4年前 , 9F
可以參考版上或google關於雙重指標的討論
11/24 22:12, 9F

11/24 22:12, 4年前 , 10F
^藉由
11/24 22:12, 10F

11/24 23:11, 4年前 , 11F
**ptr is &localPtr=>*ptr is localPtr=>localPtr=&value
11/24 23:11, 11F

11/24 23:26, 4年前 , 12F
推樓上的說明
11/24 23:26, 12F

11/25 09:25, 4年前 , 13F
新手比較容易弄混的是宣告時的* 與變數存取時的* 沒有分
11/25 09:25, 13F

11/25 09:25, 4年前 , 14F
清楚
11/25 09:25, 14F

11/25 09:33, 4年前 , 15F
簡單說除了宣告時是聲明指標以外, 平時*ptr的*是指做一
11/25 09:33, 15F

11/25 09:33, 4年前 , 16F
個dereference的動作
11/25 09:33, 16F

11/25 09:44, 4年前 , 17F
所以已知ptr是int**,對ptr裡面的內容做一次dereference(
11/25 09:44, 17F

11/25 09:44, 4年前 , 18F
實際就變成了main 的 localPtr), 同時也已知進行一次dere
11/25 09:44, 18F

11/25 09:44, 4年前 , 19F
ference後是int*, 所以這裡可以合法assign一個address(也
11/25 09:44, 19F

11/25 09:44, 4年前 , 20F
就是assign給localPtr)
11/25 09:44, 20F

11/25 22:28, 4年前 , 21F
感謝各位
11/25 22:28, 21F
文章代碼(AID): #1Tse9h_P (C_and_CPP)
文章代碼(AID): #1Tse9h_P (C_and_CPP)