- 语法
union 联合体类型名 {
成员
};
用法与struct
一样。不同点是所有成员公用相同的内存空间。联合体的sizeof
是成员中大小最大的值。
联合体是成员共用内存空间。
例如:
union Test{
int n;
double b;
};
printf("%ld\n",sizeof(union Test));
u.b = 0;
u.n = 0;
printf("u.n=%d u.b=%f\n",u.n,u.b);
u.b = M_PI;
printf("u.n=%d u.b=%f\n",u.n,u.b);
绘制下面结构体和联合体的数据布局图。
union UTest{
int n;
double b;
};
struct STest{
int n;
double b;
};
- 示例
按从低到高的顺序打印出int
类型每个字节的对应的数值(十六进制)。请绘制出数据布局图。
union IntByte{
int n;
char c[sizeof(int)];
};
union IntByte b;
b.n = 1234;
int i;
printf("%08X\n",b.n);
for(i=0;i<sizeof(int);++i){
printf("%p\t%02hhX",b.c+i,b.c[i]);
}
printf("\n");
- 如何判断一个系统是大端还是小端?
union EndianTest{
int8_t u[4];
int32_t i;
};
static bool isLittleEndian(){
EndianTest et;
et.i = 1;
return et.u[0] == 1;
}