2 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
公用體公用一個內(nèi)存區(qū)域sizeof(a)為共用體成員中長度最長的成員的size。即i
int: (|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)
char x[2] : (|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)
^ ^
高地址 低地址
分析:
a.x[0] = 10 ========================> (|0|0|0|0|1|0|1|0|)
a.x[1] = 1 ======================> (|0|0|0|0|0|0|0|1|)
公用體公用sizeof(int)長度即4字節(jié)32為,則賦值后共用體內(nèi)存為
a: (|0|0|0|0|0|0|0|0|)(|0|0|0|0|0|0|0|0|)(|0|0|0|0|0|0|0|1|)(|0|0|0|0|1|0|1|0|)
a.i 為4字節(jié)整型
則 i = 2^8 + 2^3 + 2^1 = 256 + 8 + 2 = 266

TA貢獻1804條經(jīng)驗 獲得超2個贊
union 只分配一塊內(nèi)存,有i和x公用, 即修改了x的內(nèi)容,i的內(nèi)容也改變了
按照內(nèi)存分布,x 改之后內(nèi)存為 0x010a
也就是說,i的內(nèi)存時0x10a
也就是10進制266
添加回答
舉報