一. 枚举类型
简单介绍一下
枚举 顾名思义 就是一一例举
像我们生活中的很多东西 比如说一周有多少天
性别有几种 这些都可以用枚举类型来一一列举
1. 枚举类型的定义
我们以性别为例子
enum Sex { male, female, secret };
这里如果我们开始打印它们的数值的话 我们会发现
male的初始数值是0
后面的数值依次增加
这里也从侧面证明了enum枚举类型枚举出来的是常量
当然我们对于enum的值也可以自己设置
例如
2. 枚举类型的优点
我们为什么要使用枚举类型
增加代码的可读性和可维护性
就拿我们前面写的一篇博客 通讯录 来说
case 1 2 3 这些可读性并不高 我怎么会知道1 2 3这些是什么意思呢?
这个时候我们就可以使用我们的枚举类型来定义
例如
enum select { exit, add, del, search, rev, show, };
使用这样的枚举类型就可以很好的替代
使用方便
这个就不用过多解释了 因为它可以一次定义多个常量
3. 枚举的使用
直接看代码
int main() { enum Color//颜色 { RED = 1, GREEN = 2, BLUE = 4 }; enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。 return 0; }
二. 联合体(共用体)
1 联合体的定义
联合体是一种特殊的自定义类型
这种类型定义的变量包含一系列的成员 特征是这些成员公用一块空间
例如
union un { char a;//1个字节 int b;// 4个字节 };
我们来看看 这个联合体的大小是多少
是4
这是为什么呢?
因为一个int类型的大小就已经是4了啊
那么char类型的数据放在哪里呢?
我们来看定义
联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
这时候char类型的最大对齐数是1
b类型的最大对齐数是4
所以说它的大小是4
2. 联合体的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联
合至少得有能力保存最大的那个成员)。
不知道同学们还记不记得我们前面设计了一个算法来计算计算机的大小端存储
其实这个判断方法我们利用union来判断也可以
设计代码如下
int main() { union un { char a; int b; }un1; un1.b = 1; if (un1.a==1) { printf("小端法\n"); } else { printf("大端法\n"); } }
实现结果如下
这样我们就知道了我们现在使用的机器是使用的小端法啦
这样我们就知道了我们现在使用的机器是使用的小端法啦
3. 联合体的计算
首先上定义
联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
两道题
int main() { union Un1 { char c[5]; // 5 1 int i;// 4 4 大小是8(5不是4的倍数) }; union Un2 { short c[7];// 14 2 int i;// 4 4 大小是16 (14不是4的倍数) }; //下面输出的结果是什么? printf("%d\n", sizeof(union Un1)); printf("%d\n", sizeof(union Un2)); return 0; }
运行结果如下
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够
不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯