联合体的大小取决于他所有成员中占用空间最大的一个成员的大小。并且对于复合数据类型,如union,struct, class 的对齐方式为成员中最大成员的对齐方式。
#include <iostream>
using namespace std;
union u //u的大小是其中最大的double类型成员a,所以sizeof(u) = sizeof(double) = 8;
{
double a;
int b;
};
{
double a;
int b;
};
union u1 // u1的大小是char[13] 类型的数组,但由于另一个成员int b ,所以要以4对齐,13以4对齐就是补3位到16;
{
char a[13];
int b;
};
{
char a[13];
int b;
};
union u2 // u2的大小是char[13]类型的数组,不需要补齐,所以长度为13;
{
char a[13];
char b;
};
{
char a[13];
char b;
};
int main()
{
cout << sizeof(u) << endl;
cout << sizeof(u1) << endl;
cout << sizeof(u2) << endl;
{
cout << sizeof(u) << endl;
cout << sizeof(u1) << endl;
cout << sizeof(u2) << endl;
return 0;
}
运行结果:
8
16
13