枚举类型缝缝补补

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉

🍎个人主页:橘橙黄又青-CSDN博客

1.关键字enum的定义

enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值 的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段 将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。
⽐如我们现实⽣活中:
⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举
案例1:
如果用#define

复制代码
#defineMON 1
#defineTUE 2
#defineWED 3
#defineTHU 4
#defineFRI 5
#defineSAT 6
#defineSUN 7

个看起来代码量就比较多,接下来我们看看使用枚举的方式.

格式:

复制代码
enum Day//星期
{
    //枚举常量,一旦定义不可以改
     Mon = 1,
     Tues,
     Wed,
     Thur,
     Fri,
     Sat,
     Sun
}day;
//day枚举变量,也可以在函数内部创建枚举变量如:
//enum Day s = 9;
//枚举变量的值可以修改

在这里补充一个点:

第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。在当前值没有赋值的情况下,枚举类型的当前值总是前一个值+1.

案例2:

复制代码
#include<stdio.h>

enum S {
    Mon = 1,
    Tues,
    Wed,
    Thur,
    Fri,
    Sat,
    Sun
}s;
int main()
{
    printf("%d %d %d %d %d %d %d", Mon, Tues, Wed, Thur, Fri, Sat, Sun);
	return 0;
}

输出结果:

当然,里面的值改了也一样:

复制代码
#include<stdio.h>

enum S {
    Mon = 1,
    Tues,
    Wed,
    Thur = 26,
    Fri,
    Sat,
    Sun
}s;
int main()
{
    printf("%d %d %d %d %d %d %d", Mon, Tues, Wed, Thur, Fri, Sat, Sun);
	return 0;
}

输出结果:

2.注意事项

1) 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。

2) Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。

枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。

第二点:

3.枚举总结

(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

(2)DAY 是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。

(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。在当前值没有赋值的情况下,枚举类型的当前值总是前一个值+1.

(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。

(5) 枚举型是预处理指令#define的替代。

(6) 类型定义以分号**;**结束。

4.枚举类型大小

复制代码
#include <stdio.h>

enum escapes
{
	BELL = '\a',
	BACKSPACE = '\b',
	HTAB = '\t',
	RETURN = '\r',
	NEWLINE = '\n',
	VTAB = '\v',
	SPACE = ' '
};
enum BOOLEAN { FALSE = 0, TRUE } match_flag;
void main()
{
	printf("%d bytes \n", sizeof(enum escapes); //4 bytes
	printf("%d bytes \n", sizeof(enum BOOLEAN)); //4 bytes
	printf("%d bytes \n", sizeof(match_flag)); //4 bytes
	printf("%d bytes \n", sizeof(SPACE)); //4 bytes
	printf("%d bytes \n", sizeof(NEWLINE)); //4 bytes
	printf("%d bytes \n", sizeof(FALSE)); //4 bytes
	printf("%d bytes \n", sizeof(0)); //4 bytes
}

输出结果:

所以说:枚举类型里面的枚举常量都是int类型

5.使用枚举类型的变量

1,对枚举型的变量赋值

案例1:

复制代码
#include<stdio.h>
/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
/* 使用枚举类型声明变量,再对枚举型变量赋值 */
enum DAY yesterday, today, tomorrow;

yesterday = MON;
today = TUE;
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
}

2.错误:对枚举型的常量量赋值

枚举常量一但定义将不可修改

好了今天就到这里了,都看到这里了点一个赞吧,感谢观看。

相关推荐
永远前进不waiting17 小时前
C复习——1
c语言·开发语言
一路往蓝-Anbo17 小时前
【第13期】中断机制详解 :从向量表到ISR
c语言·开发语言·stm32·单片机·嵌入式硬件
JAY_LIN——820 小时前
C语言>字符 (strlen) | 字符串函数(strcpy、strcat)
c语言
谈笑也风生1 天前
经典算法题型之扫雷游戏(二)
c语言·游戏
进击的小头1 天前
09_C 语言进阶之面向对象编程:跨平台设计 —— 从类型封装到工程实践
c语言
一路往蓝-Anbo1 天前
【第14期】裸机中断优先级:抢占与嵌套的逻辑
c语言·开发语言·stm32·单片机·物联网
雅欣鱼子酱1 天前
Type-C受电端芯片ECP5702演示:串口发送电压电流,给外部MCU读取
c语言·人工智能·单片机·嵌入式硬件·芯片·电子元器件
福楠1 天前
从C到C++ | 内存管理
c语言·c++
集芯微电科技有限公司1 天前
DC-DC|40V/10A大电流高效率升压恒压控制器
c语言·数据结构·单片机·嵌入式硬件·fpga开发
小麦嵌入式1 天前
Linux驱动开发实战(十三):RGB LED驱动并发控制——自旋锁与信号量对比详解
linux·c语言·驱动开发·stm32·单片机·嵌入式硬件·物联网