目录
1.枚举
枚举就是一一列举,把所有可能的取值一一列举
比如生活中的例子:
一周的有7天,从星期一到星期日,可以一一列举
比如在填写性别时,有男、女、保密
月份有12个月可以一一列举
只要是可一一列举的,就可以用到枚举,枚举是C语言中的一种类型
1.1枚举类型的定义
打印出来的结果:
枚举常量的值是不可以更改的,但是给常量一个值,如果不给值,就是0,下面的常量依次加一,但是如果给常量一个值,后面的常量就是从这个值开始依次+1
1.2枚举的优点
为什么使用枚举?
我们可以使用#define定义常量,为什么非要使用枚举?
枚举的优点:
- 1.增加代码的可读性和可维护性
- 2.和#define定义的标识符比较枚举有类型检查,更加严谨
- 4.便于调试
- test.c到test.exe,test.c要经历预处理(预编译)、编译、汇编、链接才能到test.c
- 假设#define RED 5,在主函数中将某一变量(num)赋值为RED(num=RED),经过预处理后num=5,上面经过预处理后#define RED 5就会被删掉(这该删的就删除了,该替换的就替换了),产生可执行程序之后才能进行调试,num经过编译、汇编、链接之后已经变成二进制了,此时进行调试时早就没有预定义符号了,所以枚举类型更加便于调试
- 5.使用方便,一次可以定义多个常量
1.3枚举的使用
enum Color
{
RED=1,
GREEN =2,
BLUE=4
};
int main()
{
enum Color clr=GREEN;
}
注意:只能拿枚举常量给枚举变量赋值,才不会出现类型的差异
2.联合体(共用体)
2.1联合类型的定义
联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,其特征是这些成员共用同一块空间(所以联合也叫共用体)
联合的关键字是union
联合体大小的计算
此时我们发现它们真的是共用同一块儿空间的
结构体中的信息必须同时存在,但是联合体的成员不必同时存在-->用其中的一个成员时不用另外的成员,只要能够满足我们使用的需求就可以了
2.2联合体的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大得那个成员)
大小端的判断
什么是大小端?
一个数值,存储时需要的内存空间只要超过一个字节,就涉及顺序的问题
比如:0x 11 22 33 44
vs2019编译器是小端存储
这里就是利用了联合体的特点,共用同一块儿空间
2.3联合大小的计算
- 联合的大小至少是最大成员的大小
- 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
数组的每个成员的类型是char类型对齐数是1,int类型的对齐数是4,所以要对齐到4的整数倍,数组会浪费一个空间,此时就是8个字节
short的对齐数是2,默认对齐数是8,所以short的对齐数是2,int的对齐数是4,默认对齐数是8,所以int的对齐数是4,它们之中最大对齐数是4,而short的大小是12个字节正好是4的整数倍,所以这个联合体的总大小是12个字节