零.导言
在学习了结构体和位段后,聪明的你一定意识到了像这样的数据结构一定还有很多。没错,和结构体相似的数据结构还有联合体。
一.什么是联合体?
联合体,顾名思义,和其成员的储存性质相关。联合,是指联合体的所有成员公用一块空间。
让我们通过和结构体的比较来学习联合体:
struct SeqList
{
int arr*;
int size;
int capacity;
};
以上是我们熟悉的结构体,那么联合体长啥样呢?
union name
{
int a;
long b;
char c;
};
以上就是联合体的声明,是不是和结构体长得很像?我们可以借助结构体来记忆联合体。
二.联合体的性质
如上述代码,联合体name中有三种数据类型,分别是char,int,long。其中long占用的空间最大,是八个字节。而联合体的性质就是:
- 整个联合体的大小等于联合体中最大的成员所占用空间的大小。
- 给联合体中的一个成员赋值,会影响到其他成员的值。
因此,在上述代码中,联合体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)个别性质是独立的,不会同时使用,所以在使用一方的时候,不用在意另外一方的数据被改变,从而减少空间的浪费。
四.相关链接
完