C语言枚举类型enum详解

enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值,

我们可以将枚举理解为编译阶段的宏,使用格式:

enum typeName{ valueName1, valueName2, valueName3, ...... };

typeName是枚举类型的名字,花括号里面的元素(枚举成员)常量而不是变量,这个一定要搞清楚,因为枚举成员的是常量,所以不能对它们赋值,只能将它们的值赋给其他的变量

枚举类型(枚举标签)、枚举成员(枚举常量)、枚举变量之间的区别

C语言枚举类型enum详解

当枚举类型和枚举变量放在一起定义时,枚举类型的名字(就是enum week中的week)可以省略不写,意思是上图的有两种写法

第一种:

enum week{Mon = 1, Tues, Wed, Thurs}num;

第二种:

enum {Mon = 1, Tues, Wed, Thurs}num;

这一点其实和结构体中的无名结构很相似,虽然定义枚举类型变量和定义结构类型变量看起来很相似,但是两者的区别还是蛮大的,一个结构体类型变量里面包含若干个成员,相当于一个打包好的快递盒子,

而枚举类型变量就不一样了,枚举类型变量不是一个包含若干个成员的集合,枚举类型变量和int、char类型的变量其实差不多,只不过枚举类型变量的赋值只能用自身的枚举成员来赋值,以上面的例子来说,

num的赋值就只能用枚举成员Mon、Tues、Wed、Thurs,而不能用其他枚举类型的枚举成员来赋值

 

定义枚举变量和定义结构体变量相同,有两种定义方法

第一种:(定义枚举类型的同时定义枚举变量)

enum week{Mon = 1, Tues, Wed, Thurs}num;

第二种:(先定义枚举类型,再定义枚举变量)

enum week{Mon = 1, Tues, Wed, Thurs}; enum week num;

枚举类型的特点

下面将用不同的示例来说明枚举类型的特点

示例一:(不显式说明枚举常量的值)

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

在没有显示说明的情况下,枚举常量(也就是花括号中的常量名)默认第一个枚举常量的值为0,往后每个枚举常量依次递增1,所以Mon=0,Tues=1,····Sun=6,下面来验证一下

enum week{Mon, Tues, Wed, Thurs, Fri, Sat, Sun}; printf("Mon=%d\nTues=%d\nWed=%d\nThurs=%d\nFri=%d\nSat=%d\nSun=%d\n", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

运行结果:

C语言枚举类型enum详解

示例二:(显示说明部分枚举常量的值)

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

上面的代码中,只显式说明了枚举常量Mon的值为1,未指定的枚举名的值将依着最后一个指定值向后依次递增(注意是最后一个指定值)

enum week{Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun}; printf("Mon=%d\nTues=%d\nWed=%d\nThurs=%d\nFri=%d\nSat=%d\nSun=%d\n", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

运行结果:

C语言枚举类型enum详解

对上面的代码稍加修改

enum week{Mon = 1, Tues, Wed, Thurs, Fri = 10, Sat, Sun}; printf("Mon=%d\nTues=%d\nWed=%d\nThurs=%d\nFri=%d\nSat=%d\nSun=%d\n", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

运行结果:

C语言枚举类型enum详解

示例三:(对枚举变量进行赋值)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1a24b5d683c53c07b594be3463780d64.html