联合体的自定义
联合是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。比如下列代码
//联合类型的声明 union Un { char c; int i; }; //联合变量的定义 union Un un; //计算这个变量的大小 printf("%d\n",sizeof(un));
联合体中的成员的地址是一样的,可能所占字节大小不同。
在同一时间联合体只能用一个成员。
联合的特点
联合体的成员是公用同一内存空间的,这样一个联合变量的大小,至少是最大成员的大小,使得联合至少有能力保存最大的那个成员。
判断当前计算机的大小端储存
int main() { int a = 1; if(*(char *)&a == 1) printf("小端"); else printf("大端"); return 0; } //利用联合体进行判断大小端,因为是要利用int类型的第一个字节进行判断 int panduan() { union Un { char c; int a; }u; u.a = 1; //if (u.c == 1) //{ // return 1; //} //else //{ // return 0; //} reuturn u.c; } int main() { int ret; ret = panduan(); if (ret == 1) { printf("小端"); } else { printf("大端"); } return 0; }
联合体的计算
不同于结构体,联合体一般是成员中占用内存最大的字节是联合体的大小,但联合体的大小也是成员中最大对齐数的整数倍。