首页 > 编程知识 正文

枚举类型enum定义,c语言枚举类型的用法

时间:2023-05-06 02:36:59 阅读:126882 作者:1476

在实际编程中,一些数据的取值往往有限,只能是非常少量的整数。 另外,为了便于在后续代码中使用,最好对各值进行命名,例如一周只有7天、一年只有12个月、一个班每周有6个课程等。

以每周7天为例,可以使用#define命令每天指定名称。

1 #包含

2

3 #define Mon 1

4 #define Tues 2

5 #定义wed 3

6 #define Thurs 4

7 #define Fri 5

8 #define Sat 6

9 #define Sun 7

10

11 intmain () {12 intday; 13扫描(“% d”,日期); 14交换机(天) 15casemon:puts ) (Monday ); 布雷克; 16casetues:puts(Tuesday ); 布雷克; 17案例wed : puts (Wednesday ); 布雷克; 18casethurs:puts(Thursday ); 布雷克; 19casefri:puts(Friday ); 布雷克; 20casesat:puts(Saturday ); 布雷克; 21casesun:puts(Sunday ); 布雷克; 2default:puts('error!' ); 23 ) 24返回0; 25 }

执行结果:

5

弗雷迪

#define命令可以解决问题,但会带来不小的副作用,宏名称太多,代码松散,总觉得不舒服。 c语言提供枚举(Enum )类型,允许您列出和命名所有可能的值。

枚举类型的定义格式如下:

枚举类型名称{ value name 1,valueName2,valueName3,…};

enum是用于定义枚举类型的新关键字,这是c语言中的唯一目的。 typeName是枚举类型的名称; valueName1、valueName2、valueName3、是与每个值对应的名称列表。

注意最后一点; 不能少。

例如,列出一周有几天。

enum week{ Mon,Tues,Wed,Thurs,Fri,Sat,Sun };

您可以看到只给定了名称,而没有给定与名称对应的值。 这是因为枚举值默认从0开始,然后递增1。 也就是说,与week的Mon、tues……sun对应的值分别为0、1……6。

更简单的方法是只为第一个名称赋值。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun };

这样,枚举值从1开始递增,与上面的写法等价。

枚举是一种可以定义枚举变量的类型。

枚举week a、b、c;

也可以在枚举类型的同时定义变量。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } a,b,c;

如果存在枚举变量,则可以分配列表中的值。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun }; enum week a=Mon,b=Wed,c=Sat;

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } a=Mon,b=Wed,c=Sat;

【例】判断用户输入了星期几。

#包含

intmain () enumweek ) mon=1,Tues,Wed,Thurs,Fri,Sat,sun ) day;

扫描(“% d”,日期); 交换机(天)情况通知: puts ) Monday ); 布雷克; casetues:puts(Tuesday ); 布雷克; 案例wed : puts (Wednesday ); 布雷克; casethurs:puts(Thursday ); 布雷克; casefri:puts(Friday ); 布雷克; casesat:puts(Saturday ); 布雷克; casesun:puts(Sunday ); 布雷克; 默认: puts (' error!' );

}返回0;

}

执行结果:

4

Thursday

需要注意的两点是:

1 )枚举列表中标识符为Mon、Tues和Wed的范围是全局(严格来说是main )函数内部),不能定义与它们同名的变量。

2 ) Mon、Tues、Wed等是常量,不能给它们赋值,只能给其他变量赋值。

枚举与宏非常类似。 宏在预处理阶段用相应的值替换名称,枚举在编译阶段用相应的值替换名称。 枚举可以理解为编译阶段的宏。

在上面的代码中,在编译的某个时刻,如下所示:

#包含

intmain () enumweek ) mon=1,Tues,Wed,Thurs,Fri,Sat,sun ) day;

扫描(“% d”,日期); 交换机(天)情况1: puts ) Monday ); 布雷克; case2:puts(Tuesday ); 布雷克; case3:puts(wednesday ); 布雷克; case4:puts(Thursday ); 布雷克; case5:puts(Friday ); 布雷克; case6:puts(Saturday ); 布雷克; case7:puts(Sunday ); 布雷克; 默认: puts (' error!' );

}返回0;

}

所有名称Mon、Tues和Wed都已被相应的数字替换。 也就是说,Mon、Tues、Wed等不是变量,不消耗数据区域(常数区域、全局数据区域、堆栈区域、堆区域)的内存,直接编译成命令并配置在代码区域中,所以使用获取它们的地址这就是枚举的本质。

枚举类型变量必须存储整数。 我认为需要和int一样长。 验证一下吧。

#包含

int main () )。

enum week{ Mon=1,Tues,Wed,Thurs,Fri,Sat,Sun } day=Mon;

printf(%d、%d、%d、%d、%d、%dn '、sizeof(enumweek )、sizeof (day )、sizeof (mon )、sizeof (wed ) )、sizeof

返回0;

}

执行结果:

4,4,4,4,4

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。