1 回答

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊
在union中所有成員都是共用一塊內(nèi)存的
所以union使用時理論上只能是其中的一種情況,如第一個例子中,實(shí)際上只有i是有效的,雖然s也可以讀寫,但邏輯上是錯的
由于共用同樣的內(nèi)存,所以當(dāng)用s進(jìn)行讀寫時,實(shí)際讀到的就是i的空間,第一個問題的輸出結(jié)果跟機(jī)器和編譯運(yùn)行環(huán)境有關(guān),看你題目應(yīng)該運(yùn)行在16位系統(tǒng)下,所以int為16位,且存放int時將低8位放在前面,高8位放在后面,s[0]對應(yīng)低8位,s[1]對應(yīng)高8位,同時在輸出的時候還進(jìn)行了從char到int的強(qiáng)制轉(zhuǎn)換,所以輸出34 12
不同系統(tǒng)的位數(shù)不同,比如現(xiàn)在最常見的應(yīng)該是32位,所以在不同機(jī)器上運(yùn)行該代碼結(jié)果可能不同
第二個問題中同樣是內(nèi)存共用,int的存儲也是低8位在前面
所以c[0]對應(yīng)i[0]的低8位為0x39
但這次沒有進(jìn)行強(qiáng)制int轉(zhuǎn)換,所以輸出char,ASCII碼為0x39的char剛好是9,所以輸出9
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報