求大神瞥一段关于联合体的代码
求大神看一段关于联合体的代码
输出的结果为什么是266 求大神详解 最好也说联合体的内存情况 谢谢
------解决方案--------------------
int为四个字节,char为一个字节,x[0] = 0x0a;x[1] = 0x01;这两个字符填充到了int后两个字节上,即为0x0000010a;所以int i = 266了
------解决方案--------------------
int i是8个字节,char x[2]是2个字节,在小端CPU模式下,联合是从低字节开始对齐。
字节 1 2 3 4 5 6 7 8
-----------------------------
i 0 0 0 0 0 0 1 10
x 1 10
i对齐x的低两个字节,所以i = (1 * 256) + 10 = 266
#include <stdio.h>
union
{
int i;
char x[2];
}a;
void main()
{
a.x[0] =10;
a.x[1] =1;
printf("%d",a.i);
}
输出的结果为什么是266 求大神详解 最好也说联合体的内存情况 谢谢
------解决方案--------------------
int为四个字节,char为一个字节,x[0] = 0x0a;x[1] = 0x01;这两个字符填充到了int后两个字节上,即为0x0000010a;所以int i = 266了
------解决方案--------------------
int i是8个字节,char x[2]是2个字节,在小端CPU模式下,联合是从低字节开始对齐。
字节 1 2 3 4 5 6 7 8
-----------------------------
i 0 0 0 0 0 0 1 10
x 1 10
i对齐x的低两个字节,所以i = (1 * 256) + 10 = 266