十五、联合体(union)

发布时间 2023-11-23 22:23:11作者: 我想对你说

十五、联合体(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;
}