作者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/m.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