→ PkmX: pointer轉成int在轉回來本來就是不合法的事情... 01/17 15:46
→ PkmX: 你如果要存可以指向任何type的指標請用void* 01/17 15:47
→ PkmX: 舉例來說在x86_64底下sizeof(int) == 4 ; sizeof(int*) == 8 01/17 15:49
→ PkmX: 至於為什麼str1宣告成global就可以 應該是因為他擺在bss剛好 01/17 16:19
→ PkmX: 被map在32-bit可以表示的範圍內 如果是擺在stack上面通常是 01/17 16:20
→ PkmX: 擺在high address 所以一轉換就爛了 01/17 16:21
→ cityhigh: 還是不太懂,一轉換就爛掉指的是什麼? 01/17 16:33
→ cityhigh: 對test()和test2()來看,傳入的address印出來也是一樣的 01/17 16:34
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 16:43:30
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 16:43:51
→ wenyonba: 他應該是說,你把8bit轉成4bit,那是要拿低位還是高位? 01/17 16:50
→ wenyonba: 如果Compiler拿的狀況不如你的預期,不就掛了 01/17 16:51
→ wenyonba: 我這樣說會不會有點病... 01/17 16:51
→ azureblaze: 保證能轉的只有intptr_t和uintptr_t 01/17 17:42
→ PkmX: 可以看到stack上面的位置轉成int再轉回void*值根本就錯了 01/17 20:55
→ PkmX: 而global變數因為位置數字夠小 所以轉換"剛好"沒問題 01/17 20:56
→ PkmX: 不過重點就是別依賴這種"剛好"的行為 挑正確的type去裝才對 01/17 20:56
→ PkmX: 而且其實把void*轉成int編譯的時候就會產生warning了=.= 01/17 20:58
→ bibo9901: 板友的大作, 裡面講得很清楚 01/17 21:03
→ Killercat: 別想些有的沒的 乖乖用void*中轉吧.... 01/18 00:10
→ Killercat: c就算了 c++其實根本沒必要做這種沒意義的亂轉就是 01/18 00:11
推 LPH66: 真想轉成整數的話轉成 intptr_t 就什麼事都沒有 01/18 02:39
→ carylorrk: 又不是做 compiler 研究,標準說有問題就不要用,不要 01/18 13:00
→ carylorrk: 去研究為什麼結果剛好正確或是為什麼回事這樣。 01/18 13:01
→ carylorrk: 這是等你熟悉了語言和平臺想自己研究再說 01/18 13:01
推 TobyH4cker: 原因PkmX說了,int 還是4 Bytes 01/18 13:34
→ TobyH4cker: 應該建議一下版主現在發問還要提供平台為x86還是x86_6 01/18 13:36
→ TobyH4cker: 4 01/18 13:36
→ cityhigh: 感謝各位大大 01/19 09:16