枚举类型缝缝补补

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

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

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

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

相关推荐
中杯可乐多加冰22 分钟前
【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务
c语言·人工智能·serverless·tdsql·腾讯云数据库
代码雕刻家7 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
Kalika0-09 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
代码雕刻家9 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
龙图:会赢的9 小时前
[C语言]--编译和链接
c语言·开发语言
Cons.W11 小时前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝
挥剑决浮云 -11 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
一颗星星辰12 小时前
C语言 | 第十章 | 函数 作用域
c语言·开发语言