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

如下运行,有答案 513 1 2 但是还是不明白,求指点!

如下运行,有答案 513 1 2 但是还是不明白,求指点!

鸿蒙传说 2022-05-12 14:11:58
union a {int a; char b[2];}x; main() {x.a=3; x.b[0]=1; x.b[1]=2; printf("%d%d%d",x.a,x.b[0],x.b[1])
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

union a
{
int a;
char b[2];
}x;
x.a=3; // 由于 a,b 是联合体, a 实际对应的4个字节值为: 3, 0, 0, 0;
x.b[0]=1; // a 实际对应的4个字节值为: 1, 0, 0, 0; 也就是 a = 0x00000001
x.b[1]=2; // a 实际对应的4个字节值为: 1, 2, 0, 0; 也就是 a = 0x00000201
printf("%d%d%d",x.a,x.b[0],x.b[1]) // 输出 51312

查看完整回答
反对 回复 2022-05-16
?
RISEBY

TA贡献1856条经验 获得超5个赞

union的内存取决于其中成员所占内存最大的内存量,在这个union中a有int和char[2],假设int是4位的,那么他就是4字节内存,而union中的成员是共享内存的。
1 2 3 4字节都是int的,
3 4是char[2]的,char[0]占4,char[1]占3(当然也是int的)
原来x.a=3使得内存变成了0x00000003(16进制)而在改变了3和4之后,int的内存也就变成了0x00000201(16进制)所以输出x.a的时候,是513

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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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