目录
一、枚举
1、枚举类型的定义
2、枚举的优点
3、枚举的使用
二、联合
1、联合类型的定义
2、联合的特点
3、联合大小的计算
一、枚举
枚举顾名思义就是列举,在C语言中是一种自定义类型,比如:要表达性别的时候可以是男、女、保密;要表达一周有几天可以是星期一到星期日。这些有限个数据都可以用枚举把它们列举出来。
1、枚举类型的定义
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 都是枚举类型。{ }中的内容是枚举类型的可能取值,也叫枚举常量(一般是大写的标识符)。这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。
2、枚举的优点
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
3、枚举的使用
在上面我已经介绍完怎么定义枚举,接下来就该使用枚举了,先看一下下面代码:
枚举常量可能取值其实都是有值的,默认第一个为0,后面的依次递增1,打印下来之后我们可以清晰的观察。
这些枚举常量的可能取值是不能修改的,但是我们可以给它赋初值。 RED没有赋初值的话初始值还是0,给GREEN赋一个初值,在GREEN后面的枚举常量也就需要+1了。
二、联合
1、联合类型的定义
联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
举个例子:
2、联合的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联 合至少得有能力保存最大的那个成员)。
观察上面的例子,为什么联合体un大小为4个字节,因为char c ,int i 它们两个共用了同一块空间,c的大小为1个字节,i的大小为4个字节,i是最大的成员,所以他们共用一块内存空间,就是4个字节了。下面例子可以看出它们确实共用了一块内存空间。
3、联合大小的计算
1、联合的大小至少是最大成员的大小。
2、当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
举个例子说明:
但是最终联合体的大小是最大对齐数的倍数,而c已经占用了5个字节,所以需要浪费3个字节,最终大小为8个字节。
但是最终联合体的大是最大对齐数的倍数,而c已经占用了14个字节,所以需要浪费2个字节,最终大小为16个字节。
讲到这里,C语言中的自定义类型就全部学习完了。要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。