1. 枚举
1.1 枚举定义
枚举的意思就是列举。列举的是可能取值。
比如:
enum color { red, bule, green, black, white };
其结构和结构体相似:
1.2 枚举常量的理解
特点:
默认的第一个常量是0,后面一次递增。赋值操作只能在枚举类型中赋值,可以理解为创建的时候给一个对应的值,但是为什么在主函数或者其他地方不能赋值呢?可以这么理解,在创建这个枚举的时候常量对应的有相应的数字,这里更改默认,使其改变,达到我们想要的目的,但是别处不能更改是因为这里我们已经定义好了我们想要的东西,它是个常量,常量是不能被修改的,但是你会回头问为什么开始可以去改变呢?因为我们需要达到某种目的,你也可以理解是语法固定。
1.3 枚举的优点
我们可以#define去定义常量为什么还需要枚举呢?
优点:
1.增强代码可读性和维护性
2.#define定义的标识符是没有类型的就是一个常量,枚举定义的常量是有类型的
3.防止命名污染
4.便于调试
5.使用方便,一次可以定义多个常量
枚举注意要点(枚举变量是有类型的):
1.4 枚举大小
enum color { red, bule, green, black, white }; int main() { printf("%d\n", sizeof(enum color)); return 0; } //结果是4
解释:因为我们枚举列举的是可能要使用的值,而在我们使用时候只会拿到一个,又因为{}内是常量所以就是4个字节的大小。
1.5 枚举变量的使用
enum operation { Exit, Add, Delete, Choose }; int main() { int input = 0; scanf("%d", &input); switch (input) { case Add: //实现操作 case Delete: //实现操作 case Choose: //实现操作 case Exit: //实现操作 } }
好处就是通过名可以知道要实现什么操作。
2.联合体(共同体)
2.1 联合体定义
联合体顾名思义就是公用一块空间。
形式(和结构体形式一样):
union Un { int a; char c; float f; };
1.2 联合体特点
看图得知:
共用同一个空间的起始地址。
1.2.1 联合体实现判断大小端
方法一:
int check_sys() { //1=0x01000000; int num = 1; return *(char*)# } int main() { int ret = check_sys(); if (ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
方法二(使用联合体求解):
int check_sys() { union Un { char c; int i; }u; u.i = 1; return u.c; } int main() { int ret = check_sys(); if (ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
1.3 联合体的大小
联合的大小至少是最大成员的大小
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
1.3.1 实例一
1.3.2 实例二