C语言枚举详解,typedef简介(能看懂文字就能明白系列)

在这里插入图片描述

系列文章目录

C语言基础专栏
笔记详解

🌟 个人主页古德猫宁-

🌈 信念如阳光,照亮前行的每一步



前言

什么是枚举,顾名思义就是列举,把可能的取值一一列举出
例如,月份有12个月,可以一一列举,一星期有七日,可以一一列举,常见的颜色有红黄橙绿青蓝紫等等。

本节目标:
认识枚举是什么及其优点,掌握枚举类型的使用,对typedef有一个初步的认识

本节重点:
都是重点


一、枚举类型的声明

我们可以用枚举类型(enumerated type)声明符号名称来表示整型常量。使用enum关键字,可以创建一个新“类型”并指定它可具有的值。

例如

enum color 
{
	red=2,
	blue=4,
	green=6,
	yellow=8
	//…………
};
enum sex
{
	man,
	woman
};

第一个声明创建了一个color作为标记名,可以把enum color 作为一个类型名使用,enum color也叫枚举类型。
color的值可能是red,blue,green,yellow

枚举常量

{}中的内容是枚举类型的可能取值,也叫枚举常量。
这些可能取值都是有值的,默认从0开始,依次递增1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然在声明枚举类型的时候也可以初始化值。
例如:
在这里插入图片描述
只要是能使用整型常量的地方就可以使用枚举常量。
例如,在声明数组时,可以用枚举常量表示数组的大小,在switch语句中,可以把枚举常量作为标签

三、枚举类型的优点

我们也可以使用#define定义变量,为什么非要使用枚举呢?
原因如下:

  1. 增加代码的可读性和可维护性。

  2. 和#define定义的标识符比较,枚举有类型检查,更加严谨。

  3. 便于调试预处理阶段会删除#define定义的符号。

#define DEBUG_ON

// 使用枚举的方式
enum {
    DEBUG_ON
};

  1. 使用方便,一次可以定义多个常量。
// 使用 #define 的方式
#define RED 0
#define GREEN 1
#define BLUE 2

// 使用枚举的方式
enum Colors {
    red,
    greem,
    blue
};

四、枚举类型的使用

enum color 
{
	red=2,
	blue=4, 
	green=6,
	yellow=8
	//…………
};
int main()
{
	printf("%d ", red);
	printf("%d ", blue);
	enum color col = red;//用enum color定义一个col变量,并用枚举常量red给枚举变量赋值
	col = green;
	printf("%d ", col);
    return 0;
}

注意:在C语言中,可以拿整数给枚举变量赋值,但是在C++是不行的,C++的类型检查比较严格。


五、typedef简介

typedef 是一个高级数据类型,利用typedef可以为某一类型自定义名称,这方面与#define类型,但是两者有三处不同:

  • 与#define不同,typedef创建的符号名只受限于类型,不能用于值。

例如:

// 使用 #define 的方式
#define MAX_VALUE 100

// 使用 typedef 的方式
typedef int MaxValue;
MaxValue maxValue = 100;


在这个例子中,MAX_VALUE 是一个宏,可以用于代表一个值。
相比之下,typedef 创建了一个新的类型名 MaxValue,该类型只能用于表示 int 类型,而不能直接代表一个值。

  • typedef由编译器解释,不是预处理器。
// 使用 #define 的方式
#define PI 3.14

// 使用 typedef 的方式
typedef float PI;

在这个例子中,#define 是由预处理器处理的,它简单地将 PI 替换为 3.14。而 typedef 则是由编译器解释的,它创建了一个新的类型 PI,并且在后续的代码中可以用于声明变量。

  • 在其受限范围内,,typedef比#define更加灵活。
// 使用 #define 的方式
#define SIZE 10
#define ARRAY_SIZE (SIZE * 2)

// 使用 typedef 的方式
typedef int Size;
Size arraySize = SIZE * 2;

在这个例子中,typedef 创建了一个新的类型 Size,并且可以在后续的代码中更加灵活地使用,而不仅仅是替代一个值。相比之下,#define 在预处理阶段仅仅是简单的文本替换,可能不具备相同的灵活性。

总结:总体来说,typedef 更适合用于创建新的类型,而 #define 更适合用于创建常量和简单的文本替换。typedef 在编译器层面提供更多的语义信息,而 #define 在预处理器阶段仅仅进行文本替换。

  • 57
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值