【C/C++】联合体

零.导言

        在学习了结构体和位段后,聪明的你一定意识到了像这样的数据结构一定还有很多。没错,和结构体相似的数据结构还有联合体。


一.什么是联合体?

        联合体,顾名思义,和其成员的储存性质相关。联合,是指联合体的所有成员公用一块空间。

        让我们通过和结构体的比较来学习联合体:

struct SeqList
{
    int arr*;
    int size;
    int capacity;
};

        以上是我们熟悉的结构体,那么联合体长啥样呢?

union name
{
    int a;
    long b;
    char c;
};

        以上就是联合体的声明,是不是和结构体长得很像?我们可以借助结构体来记忆联合体。


二.联合体的性质

         如上述代码,联合体name中有三种数据类型,分别是char,int,long。其中long占用的空间最大,是八个字节。而联合体的性质就是:

  1. 整个联合体的大小等于联合体中最大的成员所占用空间的大小。
  2. 给联合体中的一个成员赋值,会影响到其他成员的值。

        因此,在上述代码中,联合体name所占用的空间,等于其最大的成员b占用的空间。同时对a赋值会影响到b和c的值。


三.联合体的应用

        由于联合体的性质,恰当的使用联合体可以减少程序对空间的占用,如下面这个例子:

struct gift
{
    int stock_number;
    int price;
    int item_type

    union 
    {
        struct 
        {
            char title[20];
            char auther[20];
            int num_pages;
        }book;

        struct 
        {
            char colors[20];
            int size;
        }shirt;

    }item;
};

        如上述代码所示,当使用结构体来声明礼物的时候,在此结构体中使用联合体,可以减少结构体gift占用的空间,从而优化程序。

        简单地解释一下以上代码,当结构体gift被使用的时候,联合体中的book和shirt共用一块空间,由于两个结构体(book和shirt)个别性质是独立的,不会同时使用,所以在使用一方的时候,不用在意另外一方的数据被改变,从而减少空间的浪费。


四.相关链接

        【C/C++】位段-优快云博客

        【C/C++】结构体的定义-优快云博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值