Re: [問題] 找記憶體位置
※ 引述《suhorng ( )》之銘言:
: ※ 引述《devilarise (Devil)》之銘言:
: : 而如果寫成 int* b = &a;的話
: : 視為一種傳址的動作
: : 從此a跟b兩個變數的記憶體位址
: : 同時指向0x123456這個位置上
: 怪怪的 ...
: 那如果
: int a;
: int b = (int) &a; 呢 ?
你要不要自己cout b看看?@@
你這邊語意是 用 b這個int 變數的值的欄位,
來存被你強制轉型而來的記憶體位址值吧@@
感覺上, 完全不算是在傳遞記憶體位址阿
: 也許是中文翻譯的問題,
: 一般我們說傳值、傳址、傳參照是 call by value, call by address,
: call by reference 的中譯,通常用來指呼叫函式時的參數傳遞。
: '=' 為賦值, assign
: 而我賦的值是 &a, 一個位址, 但是也是一個值啊
恩 這就是我前文說過的
認知上的差異了
這邊你認為只有在函式呼叫的時候才有傳值傳址可言
而我的認知卻是, 傳遞記憶體位址 即為傳址
也就是說, int& b = &a; 這樣的語法
在我的認知上就是一種傳遞記憶體位址
無論是在呼叫函式, 或者一般的assign過程
我口中的傳值傳址, 主要就是在區別
傳遞的是記憶體位址(傳址)或者是, 該記憶體位址所儲存的值(傳值)
: 你也可以這樣用
: int a;
: int b = (int) &a;
: *( (int*) b ) = 5;
: 這種寫法當然不好,但是這是合乎語法的。
恩 你上面第三行code的語意就是
將b的內容值, 強制轉型為整數指標型態,
然後再以這個指標去找出該記憶體位址的值
最後將該記憶體位址的值, 改為5
相信上面這樣解釋, 應該夠明確了吧?@@
我還需要像v兄所說那樣, 滾回去把pointer 跟 address搞清楚嗎?
最後再解釋一次
porinter 是一種變數型態
這種型態存的 就是 address
可能是我習慣性的指標的指標
讓他以為產生什麼錯誤的看法以為我沒搞懂吧@@
在此說聲抱歉了, 我原句指標的指標
意思是說 指標的記憶體位址
因為指標存的必然是記憶體位址
所以我在課堂上學習&平常跟別人談論的時候
都很習慣這樣說了@@ ~ 指標的 "指標"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.133.240
→
11/29 12:27, , 1F
11/29 12:27, 1F
→
11/29 12:27, , 2F
11/29 12:27, 2F
→
11/29 12:28, , 3F
11/29 12:28, 3F
→
11/29 12:28, , 4F
11/29 12:28, 4F
→
11/29 12:29, , 5F
11/29 12:29, 5F
→
11/29 12:33, , 6F
11/29 12:33, 6F
→
11/29 16:16, , 7F
11/29 16:16, 7F
→
11/29 16:17, , 8F
11/29 16:17, 8F
推
11/29 16:23, , 9F
11/29 16:23, 9F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章