1.1 枚举
1.1.1 枚举概述
枚举型是四种基本数据类型之一。常量、字符型、布尔型可以用来表达数,字符,真假的描述。但我们还是觉得有点缺欠:它们不能方便地进行一些标识符的描述,如:红,橙,黄,绿,青,蓝,紫七种颜色,要在数据类型中要把它们直接表达出来,我们觉得有障碍。而在计算机内有没有这种数据类型,能够很方便地将它们表示出来?有,枚举型能办到。用四种基本数据类型不便表示的标识符,而且这些标识符的数量是有限的,我们可以用枚举的方法来表达它,把要用的所有标识符全部枚举出来。这种方法比较接近自然语言的表达
在实际应用中,一个变量只能有几种可能的取值。将这几种可能的取值一一列举出来,这样的数据类型就称为枚举类型。
关键字: enum
当一个变量所对应的值是有限多个,而且是固定的
星期:7 月份:12 季节: 4季
针对一些使用常见的,固定的,数据个数有限的,组成一个集合,集合里面的数据实际在内存中存储是整型数据
好处:1)增强程序代码的可读性,2)限制数据输入范围,
1.1.2 枚举类型的定义
{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化,即省掉"=整型常数"时,则从第一个标识符开始,顺次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后,其后的成员按依次加1的规则确定其值。
说明:
1)enum 关键字
2)enum 枚举名枚举类型
3)枚举列表中的数据,称为枚举子,不是字符串,在内存中是整型数据(int)
4)如果不给枚举列表中的枚举子赋值,则系统默认给第一个枚举子赋值为0
5)枚举列表中枚举子的值是上一个枚举的值加1
6)枚举列表中的枚举子使用逗号隔开
7)枚举变量的定义方式跟结构体变量定义的方式一样
8)给枚举变量赋值的时候必须是枚举列表中的值
9)可以给枚举列表中的枚举子赋值
10)枚举中每个成员(标识符)结束符是"," 不是";", 最后一个成员可省略","。
1.1.3 枚举类型变量的定义初始化赋值及引用
1. 枚举类型的定义跟结构体变量的定义方式一样
2. 给枚举变量赋值必须是枚举列表中的值,否则必须要将其强制转换为枚举类型然后在赋值
3. 枚举列表中的数据,称为枚举子,用标识符表示
4. 枚举类型--数据类型,具有全局和局部作用域
5. 枚举子用逗号隔开
6. 枚举子对应在内存中存储的值是整型常量值(int)
7. 系统默认枚举列表中的枚举子的值从0开始
8. 下一个枚举子的值是上一个枚举子的值加1
9. 给枚举变量赋值只能是枚举列表中的值,除非做强制类型转换
#include <stdio.h>
enum Week //枚举类型 { //枚举列表,枚举子 标识符 枚举子逗号隔开 Mon , //系统默认给第一个枚举子赋值为0 Tues, //枚举子是上一个枚举子的值进行加1 Wednes, //枚举子是整型常量值,int Thurs, Fri , Sat, Sun }; char * fun(int n); char * test(enum Week wk); int main() { //给枚举变量赋值必须是枚举列表中的枚举子 enum Week wk = Sat; printf("%d\n",wk); printf("===============================\n"); // char *p = fun(3); // printf("%s\n",p);
char * p = test(Fri); printf("%s\n",p); }
char * test(enum Week wk ) { char *str[7] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; return str[wk]; }
//写一个函数,输入十进制数据,转换为对应的星期字符串 char * fun(int n) { if(n < 1 || n > 7 ) { return NULL; } char *str[7] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; return str[n-1]; }
|
1.1.4 枚举类型在单片机中的使用,
可根据单片机的示例程序进行讲解
注意:
枚举常量无论写成什么形式它仅代表是整型常量,不是字符串和字符,所以不 能用双引号和单引号
不允许对枚举变量赋值成其他类型的数据,如果需要那么必须将此数据强制转换为枚举类型
枚举型变量在输出的时候是以整数形式输出
列表中的常量不能在初始化以外的情况下赋值
枚举型变量所对应的数值,只能是在定义枚举类型的时候,列表中所列出的数据