十五、联合体(union)
十五、联合体(union)
1、union语法
联合体和结构体都是自定义数据类型 ,通过union可以创建一个联合体,union中的成员变量共享内存(即内存中有重叠的部分),因此union的数据类型大小由其最大的成员变量决定。
//联合体union语法
union 联合体名称
{
变量类型 变量名称;
变量类型 变量名称;
};
//示例
union USER //联合体声明
{
short sHP;
int nHP;
};
USER user; //联合体使用
user.sHP=200;
2、union的特点及使用
①union中任意一个成员变量的变动,都可能导致其他成员变量的值发生变化
②union变量的大小由其最大的成员变量决定
//union的使用
#include <iostream>
union USER //联合体USER类型的定义
{
short sHP;
int nHP;
double fHP;
};
int main()
{
USER user; //声明一个联合体的变量,再没有初始化的情况下,值不好确定
std::cout << sizeof(user) << std::endl; //显示的联合体的内存大小由其最大的类型决定
std::cout << &user.sHP << std::endl; //0113FA68
std::cout << &user.nHP << std::endl; //联合体的内存地址一致
std::cout << &user.fHP << std::endl; //0113FA68
user.sHP = 100;
std::cout << user.sHP << std::endl; //只初始化了sHP,所以nHP的值是随机的
std::cout << user.nHP << std::endl;
user.nHP = 0; //一旦联合体中的某个成员变量值发送变化,那么有可能会影响其他的成员变量也发生变化
user.sHP = -1;
std::cout << user.sHP << std::endl;
std::cout << user.nHP << std::endl;
}
3、匿名联合体和结构体
匿名联合体和结构体即没有名字的联合体和结构体:
//匿名联合体
#include <iostream>
struct MyStruct
{
union //没有类型名称的联合体
{
int Mp;
int Hp;
} ls; //使用一个临时变量
} ;
int main()
{
MyStruct A;
A.ls.Hp = 200;
std::cout << A.ls.Hp << std::endl;
}