两者最大的区别在于内存利用
一、结构体struct
各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。一个struct变量的总长度等于所有成员的长度之和。
二、联合体union
各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。不允许对联合体变量名U2直接赋值或其他操作。
代码对比内存:
- #include
- //结构体
- struct u //u表示结构体类型名
- {
- char a; //a表示结构体成员名
- int b;
- short c;
- }U1;
- //U1表示结构体变量名
- //访问该结构体内部成员时可以采用U1.a=1;其中"点"表示结构体成员运算符
-
- //联合体
- union u1 //u1表示联合体类型名
- {
- char a; //a表示联合体成员名
- int b;
- short c;
- }U2;
- //U2表示联合体变量名
- //访问该联合体内部成员时可以采用U2.a=1;其中"点"表示联合体成员运算符
-
-
- //主函数
- int main(){
- printf("%d\n",sizeof(U1));
- printf("%d\n",sizeof(U2));
- return 0;
- }
-
- /*程序运行结果是:
- 12
- 4*/