枚举类型缝缝补补

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

🍎个人主页:橘橙黄又青-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.错误:对枚举型的常量量赋值

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

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

相关推荐
自然常数e1 天前
深入理解指针(7)
c语言·数据结构·算法·visual studio
bocoder1 天前
ESP-IDF(FreeRTOS)
c语言·单片机·嵌入式硬件
qs70161 天前
c直接调用FFmpeg命令无法执行问题
c语言·开发语言·ffmpeg
福尔摩斯张1 天前
【实战】C/C++ 实现 PC 热点(手动开启)+ 手机 UDP 自动发现 + TCP 通信全流程(超详细)
linux·c语言·c++·tcp/ip·算法·智能手机·udp
不想写笔记1 天前
算法 C语言 冒泡排序
c语言·笔记·算法·排序算法
历程里程碑1 天前
C++ 4:内存管理
java·c语言·开发语言·数据结构·c++·笔记·算法
2301_789015621 天前
C++:多态(面向对象的主要手段之一)
c语言·开发语言·c++·多态
晚霞的不甘1 天前
C语言利用数组处理批量数据详解
android·c语言·开发语言
渡我白衣1 天前
C++可变参数队列与压栈顺序:从模板语法到汇编调用约定的深度解析
c语言·汇编·c++·人工智能·windows·深度学习·硬件架构
zore_c1 天前
【C语言】贪吃蛇游戏超详解(包含音效、颜色、封装成应用等)
c语言·数据结构·笔记·stm32·游戏·链表