enum(枚举)

当我们处理实际问题的时候常常会遇到那种变量的取值被限制在一个有限的范围内的问题。比如一星期有7天,一年有12个月等。如果我们把这些变量一个一个罗列出来会显得很繁琐,那么我们该如何提高我们代码的可读性呢?我们可以使用C语言为我们提供的枚举类型。

枚举的定义

枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明:

enum 枚举类型名字 {名字0,....名字n};//大括号里卖弄的值又称作枚举元素

枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是就是常量符号,它们的类型是int,值则依次从0到n。如:

enum wekkday { sun,mou,tue,wed,thu,fri,sat } ;

就创建了七个常量,sun的值是0,mou 是1,wed 是2,thu 是3依次到sat 的值是6。

当需要一些可以排列起来的常量值时,定义枚举的意义就是给了这些常量值名字。

枚举变量的定义

前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。

我们可以通过以下三种方式来定义枚举变量:

1、先定义枚举类型,再定义枚举变量

enum wekkday{sun,mou,tue,wed,thu,fri,sat }; enum wekkday day;

2、定义枚举类型的同时定义枚举变量

enum wekkday{sun,mou,tue,wed,thu,fri,sat } day;

3、省略枚举名称,直接定义枚举变量

enum {sun,mou,tue,wed,thu,fri,sat } day;

实例

#include  enum wekkday{sun,mou,tue,wed,thu,fri,sat }; int main() { enum wekkday day; day = wed; printf("%d",day); return 0; }

运行结果:

枚举变量

枚举类型在使用过程中有以下及条规定:

1、枚举值是常量,不是变量。不能再程序中用赋值语句再对它赋值。

2、枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2,… 。如在weekday中,sun的值为0,mon的值为1,… ,sat的值为6。

例如:

enum weekday{sun,mou,tue,wed,thu,fri,sat } a,b,c;a=sun;b=mon;c=tue;printf("%D,%d,%d\n",a,b,c);}

**注意:**只能把枚举类型赋予枚举变量,不能把元素的数值直接赋予枚举变量。

例如:

a=sum;b=mon;

是正确的。而

a=0;b=1;

是错误的。如果一定要把数值赋予枚举变量,则必须用强制类型转换。

例如:

a=(enum weekday)2;

其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:

a=tue;

3、枚举元素不是字符常量,使用时不要加单、双引号。