看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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