1.联合体
1.1联合体类型的声明
像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。
不难发现,联合体中各个变量的起始地址是一样的。
1.2联合体大小的计算
- 联合的大小至少是最大成员的大小。
- 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
使用联合体类型可以节省空间(和结构体位段差不多)
比如,搞一个活动,要上线一个礼品兑换单,里面有三种商品:图书、杯子、衬衫。
每一种商品都有:库存量、价格、商品类型和商品类型相关的其他信息。
图书:库存量、价格、商品类型、书名、作者、页数
杯子:库存量、价格、商品类型、设计
衬衫:库存量、价格、商品类型、设计、可选颜色、可选尺寸
struct gift_list
{
int stock_number;//库存量
double price;//定价
int item_type;//商品类型
union
{
struct
{
char title[20];//书名
char author[20];//作者
int num_pages;//页数
}book;
struct
{
char design[30];//设计
}nug;
struct
{
char design[30];//设计
int colors;//颜色
int sizes;//尺寸
}shirt;
}item;
};
2.枚举类型
2.1枚举类型的声明
枚举————列举
就是把可能的取值一一列举。
enum Sex //性别
{
male,//0
female,//1
secret//2
};
注意:枚举值都是常量,叫枚举常量
int main
{
enum Sex sex1 = male;
enum Sex sex2 = female;
return 0;
}
但是也是可以赋值的(如果你想打印整数)eg:male=2;
2.2枚举类型的优点
我们可以使用 #define 定义常量,为什么非要用枚举?
优点:
- 增加代码的可读性和可维护性
- 和#define定义的标识符相比,枚举有类型检查,更加严谨
- 便于调试,预处理阶段会删除 #define 定义的符号
- 使用方便,一次可以定义多个常量
- 枚举常量是遵循左右域规则的,枚举声明在函数内,只能在函数内使用
作者自述:本文主要针对C语言的联合体和枚举体的知识。内容中包含了很多总结内容。本文制作不易,求求动动你们发财的小手点个赞和关注,这是对我创造最大的动力。后续我也会跟进内容,尽量一周至少一次,保证内容的质量。如果有想知道的内容或者有建议的地方,欢迎后台私信或者在本文留言哦。感谢各位的支持捏Thanks♪(・ω・)ノ。