union 的大小为 其最大成员的空间。所有成员共享这一个空间。
union A
{
char a;
int b;
double c;
}
A的大小为其成员 double的大小,其中最大的那个成员。
Big-Endian: 低地址存放高位,如下:
高地址
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
低地址
Little-Endian: 低地址存放低位,如下:
高地址
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
--------------
#include <stdio.h>
#include <malloc.h>
typedef union SmallBig
{
char buf[4];
long num;
}smallbig;
int main()
{
smallbig sb;
sb.num = 0x12345678;
int i = 0;
for (i = 0; i < 4; i++)
{
printf("sb.buf[%d]=%x \n",i, sb.buf[i]);
}
getchar();
return 0;
}
输出
sb.buf[0]=78
sb.buf[1]=56
sb.buf[2]=34
sb.buf[3]=12
由此可见我的电脑是 高字节在高位的小端模式