C++ structure 和unions 比較

    C++中structure 和unions在寫法上非常像,單純從語法上來講他們幾乎是一模一樣的。先看兩中數據結構的聲明:

structure:

struct some_struct
{
      MEMBER_TYPE1 member1;
      MEMBER_TYPE2 member2;
};
unions:

union some_union
{
    MEMBER_TYPE1 member1;
    MEMBER_TYPE2 member2;
}

    從上面的聲明看,structure 和unions 的聲明除關鍵字一個是struct 一個是union以外都是一樣的。

    從使用的語法上來看他們兩個也是一樣的,具體的使用就不多說了,賦值和計算完全和struct一樣,寫過struct的人都應該很熟悉,那麼他們的區別是什麼呢?

    C++ primer plus 中都將他們描述爲可以用來持有不同類型數據的數據結構。但是struct可以用來同時持有各種類型數據結構,但unions一次只能持有一種數據結構。unions所佔用的內存空間以它的成員中佔用最大內存空間爲準,即,如果一個uninon 包含有int 和long兩種類型數據,那麼一個union佔用一個long類型需要的內存空間大小。使用的時候,union的成員如果被多次賦值,那麼union代表的數據爲最後一次賦值的成員的結果,而不是每個成員分別持有不同的值。測試代碼如下:

// unions.cpp -- test for unions
#include <iostream>
#include <string>
int main()
{
    using namespace std;
    union bank_card
    {
        long card_num;
        int user_psw;
    };
    bank_card acbc_card;
    acbc_card.card_num = 12345678;
    cout << "card number: " << acbc_card.card_num << endl;
    acbc_card.user_psw = 999;
    cout << "card user password: " << acbc_card.user_psw << endl;
    cout << "card number now: " << acbc_card.card_num << endl;
    return 0;
}

輸出值爲:

card number: 12345678
card user password: 999
card number now: 999
    可以看出,一個acbc_card union實際上只是算一個實例,操作其中一個成員就更操作整個union一樣。

    unions 主要用來節省內存空間,對於嵌入式編程,操作系統等對內存管理很嚴格或者內存很稀缺的地方,unions就能派上大用場。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章