#include "stdio.h"
union var
{
int a;
char b;
};
int main(void)
{
union var v;
v.a = 1;
printf("v.a is %d\n",v.b);
//输出的地址相同
printf("v.a is %d the address is %p\n",v.a,&v.a);
printf(" v.b is %d the address is %p\n",v.b,&v.b);
}
union中的各个成员共享同一块内存空间,因此union的大小等于其最大成员的大小。
可以用来判断大小端 v.a = 1; 32位表示是(0x) 00 00 00 01
小端模式低地址放低字节,这时候v.a=1时候放入32位里面,地址如上图存放方式 是01 00 00 00,c.b是char类型,占用一个字节,此时取下来是0x01。
大端模式时候 低地址放高字节,这时候 地址是 00 00 00 01,v.b是char类型,占用一个字节, 此时取下来是 0x00 。
使用union可以节省内存空间,因为在任何给定时刻只有一个成员被使用,其他成员处于未定义状态。当一个成员被赋值后,其他成员的值可能会被覆盖。因此,使用union时需要注意避免出现潜在的数据混乱或错误。
所以可以这样单独设置某个位的值