为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁华开满天机 2022-05-13 13:11:52
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

查看完整回答
反对 回复 2022-05-16
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

union 只分配一块内存,有i和x公用, 即修改了x的内容,i的内容也改变了
按照内存分布,x 改之后内存为 0x010a
也就是说,i的内存时0x10a
也就是10进制266

查看完整回答
反对 回复 2022-05-16
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号