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

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
添加回答
举报
0/150
提交
取消