麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

共用體的定義與應用詳細解析

2020-01-26 15:55:25
字體:
來源:轉載
供稿:網友

定義:
使用覆蓋技術,幾個變量相互覆蓋,從而使幾個不同變量共占同一段內存的結構,成為共同體類型的結構。

共同體的定義類似結構體,不過共同體的所有成員都在同一段內存中存放,起始地址一樣,并且同一時刻只能使用其中的一個成員變量。

聲明共用體的一般形式為:

復制代碼 代碼如下:

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.不能對共用體變量名賦值,不能企圖引用變量名來得到一個值;不能在定義共用體變量時對它初始化,不能用共用體變量名作為函數參數。

一個共同體的實例:
設有若干個人員的數據,其中有學生和老師。學生的數據包括:姓名,編號,性別,職業,年級。老師的數據包括:姓名,編號,性別,職業,職務??梢钥闯觯瑢W生和老師所包含的數據是不同的。先要求把他們放在同一個表格中:



要求設計程序輸入人員信息然后輸出。

如果把每個人都看作一個結構體變量的話,可以看出老師和學生的前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;
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 精品成人国产在线观看男人呻吟 | 在线成人一区二区 | aa国产视频一区二区 | xxxxhdhdhdhd日本 | 久草最新在线 | 大西瓜永久免费av在线 | 九九精品视频免费 | 欧美日韩亚洲精品一区二区三区 | 欧美大胆xxxx肉体摄影 | 九九热久久免费视频 | av色先锋 | 免费国产在线观看 | 成人毛片网 | 99999久久久久久 | 法国性xxx精品hd专区 | 黄色免费高清网站 | 久久久久一本一区二区青青蜜月 | 亚洲一区 国产精品 | 夜夜夜操操操 | 国产午夜精品久久久久婷 | 在线看免费观看av | 黄色日韩网站 | 91九色蝌蚪国产 | 毛片在线视频观看 | 黄色av免费网站 | 九九黄色影院 | 欧美久久久一区二区三区 | 免费观看一级黄色片 | 精品国产一区二区三区四区阿崩 | 视频一区二区三区在线播放 | 成人福利视频导航 | 爱逼av| 国产毛片视频 | av在线免费观看网 | 欧美a黄| 午夜视频在线观 | 国产1区在线| av91肉丝一区二区电影 | 国产电影av在线 | 一级毛片在线观看免费 | 成人免费乱码大片a毛片视频网站 |