目录
枚举
顾名思义,就是一一列举
就像平时生活中:
一年365天可一一列举出来,
一年12个月也可一一列举出来.......
枚举类型的定义
与结构体使用关键字struct不同,枚举使用enum
emum color , enum week都是枚举类型
{}中的内容是枚举类型的可能取值,也叫枚举常量
每一个枚举常量都是有值的,默认从0开始,依次递增1
当然,我们在定义的时候也可赋初值
枚举类型的优点
我们明明还有更为自由的#define,为什么还要使用枚举呢?
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
枚举类型的使用
只能拿枚举常量给枚举变量赋值,才不会出现类型的差异
联合体/共用体
联合类型的定义
与结构体使用关键字struct不同,联合体/共用体使用union
联合类型的特点
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联
合至少得有能力保存最大的那个成员)
所以i与c是不能同时使用的,就像凯隐,一局游戏只能选一个红凯/蓝凯(但是凯隐这个英雄的编写不一定用到联合体)
联合大小的计算
联合的大小至少是最大成员的大小
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
例:
这里将char c[10]看作10个char类型的数据,联合的大小至少是最大成员的大小,最大成员为int i
4个字节,但是很明显不够,那10总够了吧,当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍,够是够了,但是不是最大对齐数4的整数倍,所以就是12
利用联合类型判断大小端
利用共用空间这个特点我们还可以巧妙的判断大小端(关于大小端前面的博客有这方面的讲解)
我们给i赋值1,然后判断c,如果c的值为1,那么就是小段,如果c的值为0,那么就是大端
最后,祝各位道友早日突破/进阶