枚举
枚举的概念
🍁在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如:表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。
枚举类型的定义
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,当然在定义的时候也可以赋初值。
例如:
enum Color//颜色 { RED=1, GREEN=2, BLUE=4 };
枚举的优点
✅我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点:
⭕增加代码的可读性和可维护性
⭕和#define定义的标识符比较枚举有类型检查,更加严谨。
⭕防止了命名污染(封装)
⭕便于调试
⭕使用方便,一次可以定义多个常量
枚举的使用
enum Color//颜色 { RED=1, GREEN=2, BLUE=4 }; enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
联合体(共用体)
联合体类型的定义
🍪联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
比如:
//联合类型的声明 union Un { char c; int i; }; //联合变量的定义 union Un un; //计算连个变量的大小 printf("%d\n", sizeof(un));
联合体的特点
🍟联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)
union Un { int i; char c; }; union Un un; // 下面输出的结果是一样的吗? printf("%d\n", &(un.i)); printf("%d\n", &(un.c)); //下面输出的结果是什么? un.i = 0x11223344; un.c = 0x55; printf("%x\n", un.i);
联合大小的计算
🍁联合的大小至少是最大成员的大小。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
例如
union Un1 { char c[5]; int i; }; union Un2 { short c[7]; int i; }; //下面输出的结果是什么? printf("%d\n", sizeof(union Un1)); // 输出12 printf("%d\n", sizeof(union Un2)); // 输出16
利用联合体判断当前计算机的大小端存储
union Un { char c; int i; } int main() { union Un u; u.i = 1; if(u.c == 1) { printf("小端\n"); } else { printf("大端\n"); } return 0; }