1.联合体由一个或多个成员组成,这些成员可以是不同类型,但编译器只为最大的数据成员分配足够的内存空间,所有成员占一个空间,所以联合体也叫共用体(可以利用这一点用不同的变量表示同一快空间),给其中一个成员赋值,其余成员也会发生变化
2.联合体的大小:至少是最大数据成员的大小,当最大数据成员不是最大对齐数的整数倍时就要对齐到最大对齐数的整数倍
union A
{
char a[5];
int i;
};
最大数据成员为char类型的数组大小为5,最大对齐数为int的4,不是整数倍,所以char类型数组要对齐到最大数据成员的整数倍也就是8,那么联合体的空间为8为最大数据成员的所占空间大小
3.联合体的作用:节省空间
例子:礼品有书和衣服两种,具有共同的属性库存量,但书有书名这一特殊性质,衣服有尺码这一特殊性质,如果把它们写在一个结构体里那么调用的时候就会出现大量的空间浪费,所以可以使用联合体
struct gift
{
int nuumber;
union
{
struct
{
char size;
}clothes;
struct
{
char[ name[23];
}books
}charactor
};
注意:当结构体或者联合体只使用一次时可以不写结构体或者联合体名只写变量名,多次使用二者必须都写
以上代码可以写出int类型的地址并判断大小端
判断大小端的另一些方法
int good()
{
union
{
char a;
int b;
}u;
u.b=1;
return u.a;
}
int main()
{
int a=good();
if(a==1)
{
printf("小端”);
}
else
{
printf("大端");
}
return 0;
}