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就能派上大用场。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值