C · 进阶 | 枚举?看一遍就够了

CSDN话题挑战赛第2期
参赛话题:学习笔记


在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....



前言

结构体、枚举、联合体都是自定义类型,结构体主要知识点结构体内存对齐可参考《C | 结构体内存对齐》


枚举

1. 枚举的定义

  • 大括号内叫做枚举的可能取值,而每一个可能的取值都是常量
enum Color
{
	RED,
	GREEN,
	BLUE
};
  • 如果把可能取值都打印出来呢?
int main()
{
	printf("%d\n", RED);
	printf("%d\n", GREEN);
	printf("%d\n", BLUE);
	return 0;
}

打印结果:在这里插入图片描述可以看到,如果直接打印,默认是从0开始依次增加

  • 既然枚举的可能取值都是常量,说明不能对它进行赋值,但若是创建枚举的时候初始化呢?
enum Color
{
	RED ,
	GREEN = 10,
	BLUE 
};

打印结果:在这里插入图片描述发现确实可以,并且会影响后面没初始化的值

2. 枚举的内存大小

  • 既然枚举的可能取值类似于整型常量,那三个变量的话就是12字节?
int main()
{
	printf("%d\n", sizeof(enum Color));
	return 0;
}

打印结果:在这里插入图片描述可以看到,既然是可能取值,每次只可能取一个值,所以是4个字节。但是!这个跟具体编译器有关,望铁汁们稍加注意

3. 枚举的优势

  • 看完以上内容,铁汁们可能会觉得枚举根本没鸟用嘛!别急,咱们细细研究一下~
  • 我们可以使用#define定义常量,为什么非要使用枚举?~来对比一下
enum Color
{
	RED = 5,
	GREEN = 7,
	BLUE = 10
};

#define RED 5
#define GREEN 7
#define BLUE 10
  • 看起来是这么回事没错,但是,我们要知道,#define是预处理指令,也就是说,#define定义的常量在预处理阶段就已经进行了替换,所有的RED就已经替换成了5,那么等我们调试的时候要是出现了问题,就不好发现了
    在这里插入图片描述
  • 枚举的优点总结:
    1. 增加代码的可读性和可维护性
    2. #define定义的标识符比较,枚举拥有类型,更加严谨
    3. 防止了命名污染(封装)
    4. 便于调试
    5. 使用方便,一次可以定义多个常量

4. 枚举需要注意的地方

  • 虽然枚举的可能取值是常量,类似于整形常量,并且某些编译器下还可以混合起来计算,但是要注意避免这种情况
  • 只能拿枚举常量给枚举变量赋值,这样才不会出现类型的差异
	enum Color clr = GREEN;//可以
	enum Color clr = 5;//有些编译器可以通过,但最好不要

在这里插入图片描述

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CGod

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

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

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

打赏作者

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

抵扣说明:

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

余额充值