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

看板C_and_CPP (C/C++)作者 (唱不完一首歌)時間6年前 (2019/05/03 06:16), 6年前編輯推噓3(307)
留言10則, 4人參與, 6年前最新討論串1/1
問題(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://www.ptt.cc/bbs/C_and_CPP/M.1556835364.A.327.html ※ 編輯: ptter0619 (218.166.196.107), 05/03/2019 06:37:39

05/03 07:19, 6年前 , 1F
存記憶體位址是需要空間的,&iptr是iptr的位址,iptr是
05/03 07:19, 1F

05/03 07:19, 6年前 , 2F
指向內容的位址
05/03 07:19, 2F

05/03 07:22, 6年前 , 3F
就像i = 1,&i是存1空間的位址,i則是1。指標只是把內容
05/03 07:22, 3F

05/03 07:22, 6年前 , 4F
換成位址而已
05/03 07:22, 4F

05/03 09:08, 6年前 , 5F
C語言沒有參考這個東西 C++才有 你看到的&是取址運算子
05/03 09:08, 5F

05/03 11:39, 6年前 , 6F
應該理解為&在宣告時才做為參考 否則是取址
05/03 11:39, 6F

05/03 11:40, 6年前 , 7F
int &x = y; x是y的參考 int *p = &x; p指向x的位址
05/03 11:40, 7F

05/04 09:56, 6年前 , 8F
以上我明白了 應該說指標變數也需要在記憶體裡找一塊來
05/04 09:56, 8F

05/04 09:56, 6年前 , 9F
放,所以指標變數的儲存位置和指標變數所指到的記憶體
05/04 09:56, 9F

05/04 09:56, 6年前 , 10F
位址是不一樣的
05/04 09:56, 10F
文章代碼(AID): #1SosmaCd (C_and_CPP)
文章代碼(AID): #1SosmaCd (C_and_CPP)