以下程序输出结果具体是什么?求指教?

union { int i; char x[2]; }a; int main() { a.x[0]=10; a.x[1]=1; printf("%d\n",a.i); return 0; } 输出结果是什么,具体解释。谢谢

繁华开满天机
浏览 182回答 2
2回答

缥缈止盈

公用体公用一个内存区域sizeof(a)为共用体成员中长度最长的成员的size。即iint: (|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)(|_|_|_|_|_|_|_|_|)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字节32为,则赋值后共用体内存为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字节整型则 i = 2^8 + 2^3 + 2^1 = 256 + 8 + 2 = 266

慕婉清6462132

union 只分配一块内存,有i和x公用, 即修改了x的内容,i的内容也改变了按照内存分布,x 改之后内存为 0x010a也就是说,i的内存时0x10a也就是10进制266
打开App,查看更多内容
随时随地看视频慕课网APP