联合体的大小
一,联合体大小测试代码
#include<stdio.h>
#include <string>
using namespace std;
//联合体实现
union usr {
char name[10];
int age;
};
int main() {
usr u1;//联合体实例化
char t1[10];
int t2;
printf("sizeof(usr)=%d\n",sizeof(usr));
printf("sizeof(u1)=%d\n", sizeof(u1));
printf("sizeof(t1)=%d\n", sizeof(t1));
printf("sizeof(t2)=%d\n", sizeof(t2));
return 0;
}
代码执行结果如下所示;
二,联合体的性质:
1:联合体的大小等于其最大字段的大小;
在上面的代码示例中,联合体usr包含两个字段name和age,其中char类型的name字段大小为10字节,int类型的age字段大 小为4字节。按照联合体大小的规定,那么usr的大小应该输出为10.但是结果却是12.这就涉及到数据对齐的知识了。接下来我们先简单说一下在联合体的大小该如何计算;
2:联合体大小计算:
A:先找出最大字段的大小,例如示例代码中的最大字段应该是char数组,大小为10字节;
B:找出最大对齐数(除最大字段外最大的字段)age,其大小为4字节;
C:查看最大字段的值是否为最大对齐数的整数倍,如果是,则联合体大小最大字段的大小;如果不是,则联合体大小为最大对齐数的整数倍;代码示例中最大对齐数为4,最大字段大小10不是4的整数倍。所以其大小为3X4=12;