目录
? ? ? ? ?1.2 联合体的特点
#include <stdio.h>
//联合体的声明
union Un
{
char c;
int i;
};
int main()
{
union Un u = { 0 };
printf("%d", sizeof(u));
}
运行结果是:4
我们再对比一下相同成员的结构体和联合体的内存布局情况。
? 联合的大小至少是最大成员的大小。
struct S
{
//公共属性
int stock_number;//库存量
double price;//定价
int tem_type;//商品类型
//特殊属性
char title[20];//书名
char author[20];//作者
int num_page;//页数
char design[30];//设计
int colors;//颜色
int sizes;//尺寸
};
上述的结构其实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,这样使得结构体的大小就会偏大,比较浪费内存。因为对于礼品兑换单中的商品来说,只有部分属性信息是常用的。比如:
商品是图书,就不需要design、colors、sizes。
所以我们就可以把公共属性单独写出来,剩余属于各种商品本身的属性使用联合体起来,这样就可以介绍所需的内存空间,一定程度上节省了内存。
struct gift_list
{
int stock_number;//库存量
double price;//定价
int tem_type;//商品类型
union
{
struct
{
char title[20];//书名
char author[20];//作者
int num_page;//页数
}book;
struct
{
char design[30];//设计
}mug;
struct
{
char design[30];//设计
int colors;//颜色
int sizes;//尺寸
}shirt;
}item;
};
union Un
{
int i;
char c;
};
int main()
{
union Un u = { 0 };
u.i = 1;
if (u.c == 1)
printf("是小端\n");
else
printf("是大端\n");
return 0;
}
enum Day
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Sex
{
MALE,
FEMALE,
SECRET
};
enum Color
{
RED,
GREEN,
BLUE
};
以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{}中的内容是枚举类型的可能取值,也叫 枚举常量 。
enum Color
{
RED=2,
GREEN=4,
BLUE=8
};
enum Color
{
RED=2,
GREEN=4,
BLUE=8
};
enum Color clr = GREEN;
那是否可以拿整数给枚举变量赋值呢?在C语言中是可以的,但是在C++是行的,C++的类型检查比较严格。
好啦!到此对于枚举和联合的知识点就讲解结束了。如果有不懂的地方可以在评论区里说出来;如果文章中有错误的地方,也劳烦在评论区里指出。谢谢大家!