共用体(union)
共用体的特点:所有变量共用一份空间,空间大小由最大部分所占大小决定。同样遵循字对齐,半字对齐。
注意在向共用体中变量赋值时变量间会产生覆盖,如下面的例子
#include<stdio.h>
union node
{
int num;
char ch[2];
};
int main()
{
node.num = 0;
node.ch[0] = 0;
node.ch[1] = 1;
printf("%d",num);
return 0;
}
输出结果:256
当为num赋值时,系统分配四个字节空间来保存0这个值,此时这四个字节空间中分布如下,原本每个空间应该是二进制下八个零,为了方便显示,现在用8421码转换为十六进制表示。
为num赋值完后,为ch[0] 赋值,保存在0x1000中,然后为ch[1] = 1赋值,保存在0x1001中,把原来的00覆盖为了01,最后从高地址向低地址输出num为00 00 01 00
十六进制下此值为256.
小端cpu与大端cpu
int num = 0x12345678;
其中12是高字节,78是低字节,内存空间中0x1000是低地址,0x1003是高地址,
如果低字节存放在低地址那就是小端cpu,如果高字节存放在低地址那就是大端cpu。
下面是一个可以判断cpu是大端还是小端cpu
#include <stdio.h>
union node
{
int a;
char ch;
};
int main()
{
union node p;
p.a = 0x12345678;
if(p.ch == 0x78)
{
printf("small!\n");
}
else
{
printf("big!\n");
}
return 0;
}