十五、聯合體(union) 1、union語法 聯合體和結構體都是自定義數據類型 ,通過union可以創建一個聯合體,union中的成員變數共用記憶體(即記憶體中有重疊的部分),因此union的數據類型大小由其最大的成員變數決定。 //聯合體union語法 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;
}