共用体

    共用体把几种不同数据类型的变量存放在同一块内存里。共用体中的变量共享同一块内存。

    定义共用体类型变量的一般形式:

        union 共用体名

        {

                成员列表

        }变量列表;

    与结构体类似,变量列表是可选的。如果没有变量列表,只是定义了一种共用体类型。

union data
{
    int i;
    char c;
    double d;
};
union data a;

a.i=100;
a.c='A';

    此时共用体变量a中的成员i已经没有值了,因为存储该值的内存现在已经被用来存储成c的值了。同一块内存可以用来存放几种不同类型的数据,但在某个时刻只能在其中存放一个成员变量。共用体变量中起作用的成员是最后一次存入的数据。共用体变量的长度取决于其成员的最大长度。

    结构体变量所占内存的长度是各个成员的总和,每个成员分别占有自己的存储空间。共用体变量所占内存的长度是其最长成员的长度。

    不能把共用体变量作为函数参数,也不能使函数返回共用体变量。


共用体的应用场景

    (1)通信中的数据包会用到共用体,因为不知道对方会发送什么样的数据包过来,用共用体的话就简单了,定义几种格式的包,收到包之后就可以根据包的格式取出数据。

    (2)节约内存。如果有2个很长的数据结构,但不会同时使用,比如一个表示老师,一个表示学生,要统计老师和学生的情况,用结构体就比较浪费内存,这时就可以考虑用共用体来设计。

    (3)某些应用需要大量的临时变量,这些变量类型不同,而且会随时更换。而你的堆栈空间有限,不能同时分配那么多临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值