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

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])

鸿蒙传说
浏览 134回答 2
2回答

料青山看我应如是

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 = 0x00000001x.b[1]=2; // a 实际对应的4个字节值为: 1, 2, 0, 0; 也就是 a = 0x00000201printf("%d%d%d",x.a,x.b[0],x.b[1]) // 输出 51312

RISEBY

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
打开App,查看更多内容
随时随地看视频慕课网APP