共用體的界說與運用具體解析。本站提示廣大學習愛好者:(共用體的界說與運用具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是共用體的界說與運用具體解析正文
界說:
應用籠罩技巧,幾個變量互相籠罩,從而使幾個分歧變量共占統一段內存的構造,成為配合體類型的構造。
配合體的界說相似構造體,不外配合體的一切成員都在統一段內存中寄存,肇端地址一樣,而且統一時辰只能應用個中的一個成員變量。
聲明共用體的普通情勢為:
union 共用體類型名
{
成員列表
};
界說共用體變量的普通情勢為:
共用體類型名 共用體變量名;
例如:
union data{
int i;
char ch;
double d;
};
data a,b,c;
或許
union{
int i;
char ch;
double d;
};
data a,b,c;
構造體變量所占長度是各成員占的內存長度之和。每一個成員分離占領本身的內存單位。共用體變量所占的內存長度等於最長的成員的長度。
共用體的應用
1.不克不及運用共用體變量,而只能援用共用體變量中的成員。
例如:
cout<<a.i;
cout<<a.ch;
2.應用共用體變量的目標是願望經由過程同一內存段寄存幾種分歧類型的數據。
然則要留意,每剎時只能寄存一種,而不是寄存集中。而且,假如對新的成員變量的話,本來的成員變量的值就被籠罩了。
#include<iostream>
using namespace std;
int main(){
union data{
char a;
char b;
};
data qianshou;
qianshou.a='q';
cout<<qianshou.a<<endl;
qianshou.b='m';
cout<<qianshou.a<<endl;
return 0;
}
後來,我們對共用體中的成員b停止了賦值,成果我們輸入的是成員a,輸入的是b的值,所以證實它們是公用地址的。
3.不克不及對共用體變量名賦值,不克不及妄圖援用變量名來獲得一個值;不克不及在界說共用體變量時對它初始化,不克不及用共用體變量名作為函數參數。
一個配合體的實例:
設有若干小我員的數據,個中有先生和先生。先生的數據包含:姓名,編號,性別,職業,年級。先生的數據包含:姓名,編號,性別,職業,職務。可以看出,先生和先生所包括的數據是分歧的。先請求把他們放在統一個表格中:
請求設計法式輸出人員信息然後輸入。
假如把每一個人都看做一個構造體變量的話,可以看出先生和先生的前4個成員變量是一樣的,而且第五個成員變量能夠是class或許position,當第四個成員變量是s的時刻,第五個成員變量就是class;當第四個成員變量是t的時刻,第五個成員變量就是position。
#include<iostream>
#include<string>
using namespace std;
int main(){
struct{
string name;
string num;
char sex;
char job;
union{
char grade[5];
char position[5];
}p;//界說了一個配合體變量
}person[2];//界說了一個構造體數組變量
int i=0;
cout<<"name\tnum\tsex\tjob\tclass/position"<<endl;
for(;i<2;i++){
cin>>person[i].name>>person[i].num>>person[i].sex>>person[i].job;
if(person[i].job=='s')cin>>person[i].p.grade;
else cin>>person[i].p.position;
}
i=0;
cout<<"===========show data==========="<<endl;
for(;i<2;i++){
cout<<person[i].name<<"\t";
cout<<person[i].num<<"\t";
cout<<person[i].sex<<"\t";
cout<<person[i].job<<"\t";
if(person[i].job=='s')cout<<person[i].p.grade<<endl;
else cout<<person[i].p.position<<endl;
}
cout<<endl;
return 0;
}