[問題] 想釐清指標(pointer)與參考(reference)

作者: ptter0619 (我是一顆秋天的樹)   2019-05-03 06:15:57
問題(Question):
最近剛開始自學程式語言
C語言的指標和參考(頭疼啊~)
就以我的理解是以下:
1.int *p;
意指 p是一個指向另一個整數變數的記憶體位置的整數指標變數
2.
int m = 0;
int &n = m;
意指 n是m的別名(alias),也就是說n代表m這個變數
3.問題:
如下方網址之程式碼
跑出的結果如下附圖

前三行是
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):
作者: firejox (Tangent)   2019-05-03 07:19:00
存記憶體位址是需要空間的,&iptr是iptr的位址,iptr是指向內容的位址就像i = 1,&i是存1空間的位址,i則是1。指標只是把內容換成位址而已
作者: sarafciel (Cattuz)   2019-05-03 09:08:00
C語言沒有參考這個東西 C++才有 你看到的&是取址運算子
作者: KaryuuIssen (一閃)   2019-05-03 11:39:00
應該理解為&在宣告時才做為參考 否則是取址int &x = y; x是y的參考 int *p = &x; p指向x的位址
作者: ptter0619 (我是一顆秋天的樹)   2019-05-04 09:56:00
以上我明白了 應該說指標變數也需要在記憶體裡找一塊來放,所以指標變數的儲存位置和指標變數所指到的記憶體位址是不一樣的

Links booklink

Contact Us: admin [ a t ] ucptt.com