**
2020-11-16 C++知识点累积(七)
**
**
union(联合体)
**
一.语法
union 联合体名称
{
变量类型 变量名;
…
};
例如:
#include <iostream>
union A
{
int a;
int b;
int c;
int d;
short e;
};
union B
{
long long a;
short b;
};
int main()
{
std::cout << sizeof(A) << std::endl;
std::cout << sizeof(B) << std::endl;
}
结果:
联合体A的内存大小为4个字节,联合体B的内存大小为8个字节,所以可以得出结论,通过union建立一个联合体,union中的成员变量共享内存,因此union的数据类型大小由其最大的成员变量决定
二.特性
#include <iostream>
union A
{
int a;
int b;
int c;
int d;
short e;
};
union B
{
long long a;
short b;
};
int main()
{
std::cout << sizeof(A) << std::endl;
std::cout << sizeof(B) << std::endl;
A b;//[][][][]
b.a = 2;//[2][0][0][0]
b.e = 50;//[50][0][0][0]
std::cout << b.a << "\n" << b.e << std::endl;
}
结果:
1.联合体A的内存大小为4个字节,联合体B的内存大小为8个字节,所以可以得出结论,通过union建立一个联合体,union中的成员变量共享内存,因此union的数据类型大小由其最大的成员变量决定
2.union中任意一个成员变量的值变动,都可能导致其他成员变量的值发生变动
**
匿名结构体和匿名联合体
**
union
{
int a;
short e;
}a;
struct
{
int a;
short e;
}b;
int main()
{
a.a;
b.e;
}
多用于只用一次,或者调用地方只有一个的情况
例如:
#include <iostream>
struct A
{
union
{
int a;
short e;
}a;
};
int main()
{
A a;
a.a.a;
}