C语言 | 枚举的详解

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

首先,提一下宏定义#define,其一般形式为:

#define 宏名 字符串

这个知识点很重要,到处能用得到。其可以与typedef来进行类比进行理解(可查看#define与typedef的区别?)。除此之外,其还可以与enum进行类比。

什么是枚举

从字面理解,就是一一列举的意思。很多时候,有一些数据的取值有限的,这时候可以把这些可能的结果列出来,并赋予新的名字,这样有助于提高代码的可读性。例如,一个星期有7天,一年有12个月,期末考试科目有6个科目等情况,完全可以一一列举出来。

当我们要为整数定义一些别名(例如定义为星期数)的时候,可以使用宏定义,如:

#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

此时,我们可以使用枚举来达到同样的效果,如:

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

其中,enum是关键字,是必须的。DAY是枚举名,可有可无,这个名字是自己定义的;MON=1, TUE, WED, THU, FRI, SAT, SUN是枚举成员。

枚举成员的值是根据前一个成员的值递增1,即上面枚举定义等价于:

enum DAY
{
     MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
};

若上述定义中第一个成员MON不赋值的话,那么其默认为0。

若其他成员赋了初值,也是遵循“枚举成员的值是根据前一个成员的值递增1”这一规则,如:

enum DAY
{
    A,B,C=100,D,F=200,G 
};

此处

A=0
B=1
C=100
D=101
F=200
G=201
枚举类型变量的定义方法

 

方法一

enum DAY
{
     MON=1, TUE, WED, THU, FRI, SAT, SUN
};

enum DAY good_day, bad_day;

此处,DAY是枚举名,相当于一个模板,可以使用这个模板去定义变量good_day,bad_day,定义的时候不要忘了enum。

 

方法二

enum
{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
}good_day, bad_day;

相对于方法一,此处省略了枚举名。虽然更简洁了,但是因为没有了名字,后面就不能用该枚举定义新的变量。

 

方法三

typedef enum DAY
{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;

DAY good_day, bad_day;

此处使用typedef为枚举定义一个别名,这个别名为DAY,关于typedef的介绍可点击文首的链接进行查看。

程序实例
#include <stdio.h>

typedef enum DAY
{
   MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;

int main(void)
{
  DAY good_day;
  printf("你觉得一周中哪一天最美好?\n");
  scanf("%d", &good_day);
  printf("我比较喜欢");
  switch(good_day)
  {
  case MON: printf("星期一"); break;
  case TUE: printf("星期二"); break;
  case WED: printf("星期三"); break;
  case THU: printf("星期四"); break;
  case FRI: printf("星期五"); break;
  case SAT: printf("星期六"); break;
  case SUN: printf("星期日"); break;
  default:  printf("Error!"); break;
  }

  return 0;
}

程序运行结果:

枚举变量占用的字节数?

实测程序:

#include <stdio.h>

typedef enum DAY
{
   MON=1, TUE, WED, THU, FRI, SAT, SUN
}DAY;

int main(void)
{
  DAY good_day;
  
  printf("sizeof(DAY) = %d\n",sizeof(DAY));
  printf("sizeof(good_day) = %d\n",sizeof(good_day));
  printf("sizeof(int) = %d\n",sizeof(int));

  return 0;
}

运行结果:

从该程序运行结果也可看出,枚举类型变量需要存放的是一个整数,它的长度和int的长度相同。

以上就是关于枚举类型enum的一些笔记,如有错误欢迎指出。

最后,分享两篇关于枚举的文章,都讲得很详细。

https://www.cnblogs.com/JCSU/articles/1299051.html
http://c.biancheng.net/cpp/html/99.html
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式大杂烩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值