1.区别:
(1)在存储多个成员信息时,struct给每个成员分配存储空间,可以存储多个成员信息;而union成员会用同一个存储空间,只能 存储最后一个成员信息。
(2)在任何同一时刻,union中只存放了一个被先选中的成员,struct中所有成员都存在。
(3)对于union中的某一成员赋值,会改写其他成员的值,原先的值就不存在了;struct的某一成员赋值不影响其他成员的值。
2.对齐方式:
union的大小取决于它所有的成员中,占用空间最大的一个成员的大小;
复合数据类型,如union,struct,class的对齐方式为成员中对齐方式最大的成员的对齐方式。
注:对界是可以更改的,使用#pragma pack(x)宏可以改变编译器的对界方式,默认是8。C++固有类型的对界取编译器对界方式与自身大小中较小的一个
eg:
struct s1
{
char a;
double b;
int c;
char d;
};
struct s2
{
char a;
char b;
int c;
double d;
};
cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 16
union u
{
double a;
int b;
};
union u2
{
char a[13];
int b;
};
union u3
{
char a[13];
char b;
};
cout<<sizeof(u)<<endl; // 8
cout<<sizeof(u2)<<endl; // 16
cout<<sizeof(u3)<<endl; // 13
eg(对于注的例子):C++固有类型的对界取编译器对界方式与自身大小中较小的一个。
#pragma pack(2)
union u2
{
char a[13];
int b;
};
cout<<sizeof(u2)<<endl;//14