作者ptter0619 (唱不完一首歌)
看板C_and_CPP
標題[問題] 想釐清指標(pointer)與參考(reference)
時間Fri May 3 06:15:57 2019
問題(Question):
最近剛開始自學程式語言
C語言的指標和參考(頭疼啊~)
就以我的理解是以下:
1.int *p;
意指 p是一個指向另一個整數變數的記憶體位置的整數指標變數
2.
int m = 0;
int &n = m;
意指 n是m的別名(alias),也就是說n代表m這個變數
3.問題:
如下方網址之程式碼
跑出的結果如下附圖
https://imgur.com/dJAmBIr
前三行是
iptr = 0x7ffc59161654
&iptr = 0x7ffc59161658
*iptr = 5
想請問第二行&iptr的記憶體位址與iptr記憶體位址,為什麼會不一樣?
而&是取址,*是取值,
因為&iptr是「iptr所指向的記憶體位址」的參考,
也就是&iptr是iptr的別名?
而這個別名&iptr變數在另一個記憶體的位置儲存在0x7ffc59161658
與iptr本名儲存在記憶體的位置不同,
而&iptr的記憶體「內容」則是記錄了iptr指向「i」的記憶體位置,
因此,&iptr在記憶體0x7ffc59161658
所存的內容為0x7ffc59161654 ?
是這樣理解的嗎?
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://ideone.com/rWF65Z
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.196.107
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1556835364.A.327.html
※ 編輯: ptter0619 (218.166.196.107), 05/03/2019 06:37:39
1F:推 firejox: 存記憶體位址是需要空間的,&iptr是iptr的位址,iptr是 05/03 07:19
2F:→ firejox: 指向內容的位址 05/03 07:19
3F:推 firejox: 就像i = 1,&i是存1空間的位址,i則是1。指標只是把內容 05/03 07:22
4F:→ firejox: 換成位址而已 05/03 07:22
5F:→ sarafciel: C語言沒有參考這個東西 C++才有 你看到的&是取址運算子 05/03 09:08
6F:推 KaryuuIssen: 應該理解為&在宣告時才做為參考 否則是取址 05/03 11:39
7F:→ KaryuuIssen: int &x = y; x是y的參考 int *p = &x; p指向x的位址 05/03 11:40
8F:→ ptter0619: 以上我明白了 應該說指標變數也需要在記憶體裡找一塊來 05/04 09:56
9F:→ ptter0619: 放,所以指標變數的儲存位置和指標變數所指到的記憶體 05/04 09:56
10F:→ ptter0619: 位址是不一樣的 05/04 09:56