Re: [問題] 找記憶體位置

看板C_and_CPP (C/C++)作者 (Devil)時間16年前 (2009/11/29 12:15), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串5/7 (看更多)
※ 引述《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
像你說的, 我是因為你把pointer與address都寫成了"指標"
11/29 12:27, 2F

11/29 12:28, , 3F
所以讓我有某些錯覺; 另外, 確實我把你的傳值與傳址使用
11/29 12:28, 3F

11/29 12:28, , 4F
了l-value與r-value的觀念去解讀了, 我也是等到現在這篇
11/29 12:28, 4F

11/29 12:29, , 5F
才看懂你的值與址是variable的value與address....Orz
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
樓上+1,有點腦筋太直或是不會做人、公關的感覺
11/29 16:23, 9F
文章代碼(AID): #1B4VLSza (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B4VLSza (C_and_CPP)