c语言 枚举类型 uint32_【C语言资料更新】C语言中的枚举类型(enum)

d1993b1eb5f5c4df74a24b46018bb1cf.png文/Edward 枚举是C语言里面所定义的一种基本数据类型,它可以使程序变得更加简介,更加易读。枚举的定义类似于我们数学里面的有限集合,如一周有7天,分别是SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY。那我们在编程时定义这些星期天数的时候,就可以将其定义为一个枚举,此后的使用中只要用到这个枚举类型定义的变量,其值也就是这七个星期天数中的任意一天。以下内容,我们就以这七个星期天数为例,开始我们枚举的讲解。 枚举的说明与结构和联合相似, 其形式为:
enum 枚举名{  标识符[=整型常数],    标识符[=整型常数],    ...  标识符[=整型常数]} 枚举变量;
当然,我们也可以使用typedef关键词,将一个枚举定义成一种模板数据类型,其形式为:
typedef enum{  标识符[=整型常数],  标识符[=整型常数],  ...  标识符[=整型常数]} 枚举数据类型;
与结构体和共用体不一样的是,一个枚举内部的成员不能被显示地指定数据类型,枚举中的成员只能是整型数值,这些数值你可以显示地指出来,或者使用编译器分配的默认值。另外,枚举内部的成员并不是变量,它们只不过是一系列的标识符而已,其属性和常量一致,因此在我们使用枚举内部成员的时候,除了初始化以外便不可以再随便对其赋值了。如,我们可以将一周七天定义成一种枚举类型。
typedef enum{  SUNDAY= 0,  MONDAY= 1,  TUESDAY = 2,  WEDNESDAY = 3,  THURSDAY = 4,  FRIDAY = 5,  SATURDAY = 6} EWeekday_t;//定义枚举类型EWeekday_t Wekday; //定义枚举变量
这里再注意一下枚举定义时和结构体联合体定义的区别,每一项数据成员之后都是以逗号结尾的,而不是分号。最后一项后面的逗号可以省略。 以上就是定义一个枚举类型,并且显示地指明这个枚举内部每一个标识符的值。一旦当枚举变量Wekday被定义好之后,我们就可以使用枚举定义时里面的标识符对其进行赋值了,如Wekday = THURSDAY。 当然,如果我们不想对每一项的枚举标识符进行赋值,我们也可以使用省略的写法来完成,只要显示地指明出第一个成员的值,后面的枚举值都会在第一个成员值的基础上往后增1。
typedef enum{  SUNDAY= 0,  MONDAY,  TUESDAY,  WEDNESDAY,  THURSDAY,  FRIDAY ,  SATURDAY} EWeekday_t;//定义枚举类型EWeekday_t Wekday; //定义枚举变量
上面这段代码,虽然没有显示地指明枚举中标识符的每个数值,但是它显示地指明了SUNDAY为0,那么编译器就会显示地在0的基础上分别递增1,并且按顺序赋给下面的标识符,如MONDAY就为1,TUESDAY就为2,依次类推。如图1所示,这里注意下,我们对枚举变量赋值时,虽然可以直接使用标识符,如Wekday= MONDAY,但是用printf函数打印时,我们还是需要使用“%d”将其作为整数打印出来,打印的结果也是一个个整型数字。 3eac67566c534dedbdf319eaef5400cc.png 图1枚举变量的打印 如果中途对枚举中某一标识符再赋值,那么这个被赋值标识符后面的标识符都会顺延加1。如图2所示。 2d3b56622f03eb09263d75a029409991.png 图2 中途修改枚举标识符的值 当然,枚举中标识符的值可以出现重复,但无论怎么变,枚举中的标识符都满足一条规律,即显式指明标识符后面的标识符都会增1。如图3所示,我们将标识符WEDNESDAY再显示地指明为0,那么其后面的标识符都会从0开始自增。 3007063960f10ecb17036b260652a554.png 图3 枚举标识符显式重复指明数值 还需要注意一点的是,在C语言中,枚举只是一种让程序变得明了的手段,并不能对变量的值进行限定,这一点很重要,因此,你可以对枚举任意赋值。对于MinGW来说,哪怕直接对枚举变量赋值浮点数,编译器也不会抛出警告,最多将其作为整数来处理。如图4所示。 77b8aa2fe8a8c7cda04440bb95114a5d.png 图4 MinGW对枚举处理 60a0ac7574097a04d61c8085001964c1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值