看板 C_and_CPP 關於我們 聯絡資訊
讓我一個旁觀者來聊聊吧~ 其實回到最初的問題 會討論這個也就是只想知道 「指標究竟能不能夠轉成 int 存起來使用?」 這邊 GCC 先生在一開始的推文提到 所有的指標都能夠轉成整數其實也只是為了回答這件事而已 不過後來發現 其實指標好像也不一定能轉成 int 就討論的結果來說, 各類型的 pointer 應該被看成是特殊的 struct 裡面有可能放著函數位址, 有可能放 type, 有可能放各式各樣莫名其妙的東西 你會說所有的 struct 都可以轉成 int 嗎? 我想這問題應該是否定的 至於到後來記憶體位置變成整數什麼的 我想 GCC 先生後來的整數定義應該是 「一個由 N 個 bit 組成的空間」 那麼的確所有的東西都可以轉成整數 也不能說有錯吧 但這個整數很顯然不是 int 我相信兩邊討論的東西不一樣的時候再下去也是雞同鴨講啊 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.70.81
Feis:但是顯然 G 大不認同 "所有的東西都可以轉成整數" 09/08 10:49
Feis:所以我已經不知道他對 "整數" 的看法是什麼... Q__Q 09/08 10:50
Feis:阿. 我知道了. 關鍵是 "轉成" 整數 09/08 10:51
Ebergies:他應該是要表達所有的東西都可以用一個數字顯示出來這樣 09/08 10:53
Feis:我們對 "轉" 是具有一般化或是特製化有觀念上的差異 09/08 10:53
Ebergies:老實說之前我也以為 reinterpret_cast 是無敵的 LOL 09/08 10:54
Feis:就像是浮點數 (3.5) 轉整數是 (3) 還是 (3.5) 的位元表示? 09/08 10:55
Feis:reinterpret_cast 很弱阿! 你 double 不能轉 int XD 09/08 10:55
Ebergies:以這個邏輯來看應該要是 3.5 的記憶體內容表示的整數 09/08 10:56
Favonia:"所有的東西都可以轉成整數"既是也不是,但我無法在這版講 09/08 10:58
Ebergies:我不確定樓上指的是啥但是電子訊號有些情況的確有三種狀 09/08 11:00
Ebergies:態但是那個應該是被排除在這個所有的東西外啦 09/08 11:01
Ebergies:double 轉 int 應該語意上完全跟 reinterpret 不相容啊 09/08 11:02
Favonia:我只是覺得 PLT 版才是討論這種哲學問題的地方。 09/08 11:02
Ebergies:所以那個不算啦~ 09/08 11:02
Favonia:(跟電子訊號有幾種狀態一點關係也沒有...) 09/08 11:03
Ebergies:嗯嗯那是我誤會了xD 是否有幸可以聊聊相關的哲學問題呢~ 09/08 11:04
Favonia:lol 就這個版不適合啊... 我現在很後悔開啟這討論 lol 09/08 11:08
Feis:Ebergies: 那 static_cast<void *>, reinterpret_cast<void*> 09/08 11:09
Feis:語意相同嗎? :P 09/08 11:09
Feis:不過 reinterpret_cast 只能轉指標. double to int 是好玩 09/08 11:11
Ebergies:我覺得不同, 但以 void* 來說作用一樣吧? 09/08 11:13
Feis:作用阿.... 這很難說. 是哲學問題 (逃) 09/08 11:14
Feis:可以試試看把 int 用兩種方法轉成 void * 看看 09/08 11:15
Ebergies:哈哈 C++ 就這點讓我覺得沒有像 C#, Python 等更高階的語 09/08 11:16
Feis:至於作用一不一樣, 就又回到 reinterpret_cast 的老問題 09/08 11:16
Ebergies:言這麼美 09/08 11:16
longlongint:指標都是假的吧? OS或是runtime會自動維護,隨時改變 09/08 11:16
Feis:longlongint: 不是很確定 "假" 要強調的意涵? 09/08 11:21
a27417332:總覺得這樣看下來,還是不太能理解兩方的說法囧 09/08 13:00
a27417332:只能理解有些東西沒辦法轉,但dubugger裡面又有位址0.0 09/08 13:01
GNUGCC:重點就在 Debug 看的到位址就夠了,其他的留給有興趣的人自 09/08 13:51
GNUGCC:行研究囉^^ 09/08 13:51
Feis:a27417332: 有位址不代表能 "正常" 運作. 09/08 13:53
Feis:簡單說, 如果我只把指標的"內容"給你, 而沒有型態資訊 09/08 13:54
Feis:是無法正常呼叫運作的. 09/08 13:54
Feis:你看 d 大的寫法可以發現他需要知道類別的資訊 09/08 13:55
Feis:尤其在多重繼承的時候, 你同時需要知道變數與指標的型態資訊 09/08 13:56
Feis:細節在 L 大 #1IArv-2Q 的程式碼裡. 09/08 14:04
Feis:而 G 大只在乎到最後他會執行到函式的開頭位址 (如果有的話) 09/08 14:11
Feis:只是這跟我們一開始討論轉型已經完全沒有關係了. XD 09/08 14:15
GNUGCC:F 大,關於您昨天問的2個問題,怎麼回答一半人就跑了? 09/08 14:15
Feis:我回答完了阿? G 大你很可愛 09/08 14:15
Feis:我要出門了喔~ 其實我很忙. XD 09/08 14:16
GNUGCC:難道我都很閒,還花很多時間在回答「相同」的問題? 09/08 14:18
GNUGCC:我覺得以您這樣的修養,很難想像您的學習進度會是如何^^ 09/08 14:18
Feis:哈,G大是該休養一下~ 09/08 14:22
GNUGCC:個人是覺得如果一個人有「劣根性」的話,我想學習其他任何事 09/08 14:25
Feis:XX是啊,加油!(拍拍) 09/08 14:26
GNUGCC:物大概只有「知其所然,卻不知其所然」的冏境,大家一起加油 09/08 14:27
GNUGCC:吧^^ 09/08 14:27
a27417332:然後我有在想,G大的意思是指debug裡看到的位置都是 09/08 14:32
a27417332:無號正整數是這個意思? 09/08 14:32
a27417332:然後類別函數的函數指標似乎必須有額外資訊才可以拿到 09/08 14:35
a27417332:我改天有空再去翻物件模型好了0.0希望能再有新的想法 09/08 14:35
Feis:我晚上整理一下回你信箱,因為會很長~ 09/08 14:36
a27417332:真的嗎,謝謝OAQ不過直接PO在板上作為總整理不是可以讓 09/08 15:11
a27417332:其他和我一樣迷惑的新手認識0.0 09/08 15:12
Feis:因為我需要休養一下,最近話多~_~ 09/08 15:15
rephansu:哪邊有文章說明"成員函式指標"實際是儲存什麼東西嗎? 09/08 23:59
rephansu:google資料有點多,不太好找。 09/09 00:00
purpose:http://goo.gl/Hg20G 09/09 00:02
rephansu:大感謝~~~~~ 09/09 00:07
Ebergies:你知道了其實也沒什麼用, 因為 VC 的換到 GCC 就不適用了 09/09 00:07
rephansu:看了一下VC的debug, 儲存的不是成員函式本身的指標, 09/09 00:44
rephansu:但call該指標會經過幾個jmp跳到該成員函式的位址 09/09 00:46
rephansu:所以理論上它還是個指標, 但不是該成員函式的指標 09/09 00:58
rephansu:不知道這樣的想法有無錯誤? 09/09 00:59
rephansu:資料內容不是重點,而是call function時怎麼使用這個資料 09/09 01:44
rephansu:C++應該沒有規範到member function pointer要怎麼實作XD 09/09 01:46
rephansu:因此最好的方法還是看組語了解編譯器實作方式 09/09 01:47
a27417332:還好最近從高中圖書館挖了一本組合語言,希望有幫助 09/09 17:08
purpose:看得懂暫存器意思,其他指令意思用google就好啦 09/09 17:12
purpose:組語的書會教你一堆定址之類有的沒的,只是要看懂反組譯 09/09 17:12
purpose:之後的內容,不是要自己寫組語的,不用學這麼多 09/09 17:13
Feis:a27417332: 結果我信還沒寫完 XD 09/09 17:36
GNUGCC:rephansu 大說對了大部份事實,其實還可以說的再更底層一點. 09/09 19:57
GNUGCC:只是我太想再說下去了,怕有些人又在移花接木,沒完沒了. 09/09 19:58
Feis:G 大很想說就快說沒關係~ 我不會再回你的了~ 覺得無聊了 09/09 20:17
Feis:rephansu: 我覺得用組語了解不是好方法~ 要從為什麼這樣設計 09/09 20:18
Feis:例如, 要實作的話需要知道哪些資訊. 才不會陷入 "知其所以然" 09/09 20:18
Feis:之後我都用信件討論了XD 不然 G 大一直人身攻擊 Q_Q 09/09 20:19
Feis:我也不覺得自己是對的. 但是 G 大三招: 我說過,自己看,嘴砲 09/09 20:22
Feis:為了修養自己~ 我不會再發文或回應了~ :) 09/09 20:23
Feis:我也為了我的任性妄為跟 G 大和板友道歉. m(_-_)m 09/09 20:26
GNUGCC:F 大千萬別這麼說,只是我希望能先看清楚在討論什麼事情然後 09/09 20:32
GNUGCC:若有不清楚的地方以「學習態度」的方式來發問,這樣或許會比 09/09 20:32
GNUGCC:較好唷^^ 09/09 20:33
Feis:我不會再回囉~ G 大掰掰~ 不要再嘴砲了~ 09/09 20:33
azureblaze:是的 謝謝充滿個人風格的G大師 09/09 20:33
GNUGCC:噗噗~ 09/09 20:37
AnyaAlstreim:為什麼要用學習態度來問別人的嘴砲... 09/10 12:04