c语言中的枚举

c语言中的枚举

枚举(或枚举)是C中用户定义的数据类型。它主要用于将名称分配给积分常量,名称使程序易于阅读和维护。
枚举相对来说运用和理解都是比较简单的
我们直接看例子:
// An example program to demonstrate working
// of enum in C
#include<stdio.h>
 
enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
 
int main()
{
    enum week day;
    day = Wed;
    printf("%d",day);
    return 0;

在上面的例子中,通过枚举定义变量day 然后将wed的值赋给day 因为是枚举类型,所以enum中的每个名称的值为0, 1, 2, 3, 4, 5, 6
显然wed值为2 所以day = 2;
看下面这个例子,更加详细的表现了枚举的默认状态
#include<stdio.h>
 
enum year{Jan, Feb, Mar, Apr, May, Jun, Jul, 
          Aug, Sep, Oct, Nov, Dec};
 
int main()
{
   int i;
   for (i=Jan; i<=Dec; i++)      
      printf("%d ", i);
       
   return 0;
}
在此示例中,for循环将从i = 0运行到i = 11,因为i的值最初为Jan,为0,Dec的值为11。

关于枚举初始化的有趣事实

1、如果我们没有为枚举名称显式分配值,编译器默认分配从0开始的值。例如,在以下C程序中,星期日获取值0,星期一变为1,依此类推。

#include <stdio.h>
enum day {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
 
int main()
{
    enum day d = thursday;
    printf("The day number stored in d is %d", d);
    return 0;
}
想必大家已经知道结果了,没错就是
The day number stored in d is 4
2、我们可以指定值以任何顺序的一些名字,其他没有分配值的名称将前一个名称的值加一
#include <stdio.h>
enum day {sunday = 1, monday, tuesday = 5,
          wednesday, thursday = 10, friday, saturday};
 
int main()
{
    printf("%d %d %d %d %d %d %d", sunday, monday, tuesday,
            wednesday, thursday, friday, saturday);
    return 0;
}
结果:1 2 5 6 10 11 12
3、分配给枚举的名称的值必须是一些integeral恒定,即,该值必须在范围从最小可能的整数值到最大可能的整数值。

4、所有枚举常量在其范围内独一无二,例如,以下程序编译失败
enum state  {working, failed};
enum result {failed, passed};
 
int main()  { return 0; }
报错:redeclaration  of enumerator "failed' 重新确认枚举者

枚举与宏

我们也可以使用宏定义名称常量。例如,我们可以使用以下宏定义“工作”和“失败”。

#define Working 0
#define Failed 1
#define Freezed 2

当许多相关的命名常量具有积分值时,使用枚举超过宏有多个优点。
a)枚举遵循范围规则。
b)枚举变量自动分配值。以下更简单

enum state  {Working, Failed, Freezed};
这样对比哪个更简单显而易见,有木有!



  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴着眼镜看不清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值