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

缥缈止盈
TA贡献2041条经验 获得超4个赞
公用体公用一个内存区域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字节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
TA贡献1804条经验 获得超2个赞
union 只分配一块内存,有i和x公用, 即修改了x的内容,i的内容也改变了
按照内存分布,x 改之后内存为 0x010a
也就是说,i的内存时0x10a
也就是10进制266
没有找到匹配的内容?试试慕课网站内搜索吧
添加回答
举报
0/150
提交
取消