系列文章目录
C语言基础专栏
笔记详解
🌟 个人主页
:古德猫宁-
🌈 信念如阳光,照亮前行的每一步
文章目录
- 系列文章目录
- 🌈 *信念如阳光,照亮前行的每一步*
- 前言
- 一、枚举类型的声明
- 枚举常量
- 三、枚举类型的优点
- 四、枚举类型的使用
- 五、typedef简介
前言
什么是枚举,顾名思义就是列举,把可能的取值一一列举出
例如,月份有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定义变量,为什么非要使用枚举呢?
原因如下:
-
增加代码的可读性和可维护性。
-
和#define定义的标识符比较,枚举有类型检查,更加严谨。
-
便于调试预处理阶段会删除#define定义的符号。
#define DEBUG_ON// 使用枚举的方式
enum {DEBUG_ON
};
- 使用方便,一次可以定义多个常量。
// 使用 #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 在预处理器阶段仅仅进行文本替换。