作者devilarise (Devil)
看板C_and_CPP
標題Re: [問題] 找記憶體位置
時間Sun Nov 29 12:15:21 2009
※ 引述《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
→ VictorTom:奇怪??小弟我不覺得自己有要人"滾回去"的想法, 事實上就 11/29 12:27
→ VictorTom:像你說的, 我是因為你把pointer與address都寫成了"指標" 11/29 12:27
→ VictorTom:所以讓我有某些錯覺; 另外, 確實我把你的傳值與傳址使用 11/29 12:28
→ VictorTom:了l-value與r-value的觀念去解讀了, 我也是等到現在這篇 11/29 12:28
→ VictorTom:才看懂你的值與址是variable的value與address....Orz 11/29 12:29
→ devilarise:恩 讓你費心了@@ 我會加強表達能力低 11/29 12:33
→ MOONRAKER:鐵口直斷:我看你遲早還會被噹。 11/29 16:16
→ MOONRAKER:如果沒有人再噹你,那是因為大家不想浪費時間。 11/29 16:17
推 twotwoone:樓上+1,有點腦筋太直或是不會做人、公關的感覺 11/29 16:23