程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 共用體(union),union

共用體(union),union

編輯:C++入門知識

共用體(union),union


  聲明

union one4a11
{
    int int_val;
    long long_val;
    double double_val;
};

  可以使用one4all變量來存儲int、long、或double,條件是在不同的時間進行:

one4all pail;
pail.int_val=15;
cout<<pail.int_val;
pail.double_val=1.38;
cout<<pail.double_val;

  因此,pail有時可以是int變量,而有時又可以是double變量。成員名稱標識了變量的容量。由於共用體每次只能存儲一個值,因此它必須有足夠的空間來存儲最大的成員,所以,共用體的長度為其最大成員的長度。

  共用體的用途之一是,當數據項使用兩種或更多種格式(但不會同時使用)時,可節省空間。例如,假設管理一個小商品目錄,其中有一些商品的ID為整數,而另一些的ID為字符串。在這種情況下,可以這樣做:

struct widget//小商品
{
char brand[20]
int type;//類型
union id
{
    long id_num;//整數
    char id_char[20];//字符串
}id_val;
};
…
widget prize;
…
if(prize.type==1)
    cin>>prize.id_val.id_num;使用成員的名字顯示模式
else
    cin>>prize.id_val.id_char;

 

  匿名共用體沒有名稱,其成員將成為位於相同地址處的變量。顯然,每次只有一個成員是當前的成員:

struct widget
{
    char brand[20];//商標
    int type;//類型
    union
    {
        long id_num;
        char id_char[20];
    };
};
…
widget prize;
…
if(prize.type==1)
    cin>>prize.id_num;
else
    cin>>prize.id_chat;

  由於共用體是匿名的。因此id_num和id_char被視為prize的兩個成員,它們的地址相同所以不需要中間標識符id_bal。程序員負責確定當前哪個成員是活動的。

  共用體常用於(但並非只能用於)節省內存。另外,共用體常用於操作系統數據結構或硬件數據結構。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved