一、枚举
1.1 什么是枚举
C语言中还有一种枚举类型。枚举就是将预先定义好的值装在枚举类型中,使用起来比较方便。
实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型。枚举的目的是提高程序的可读性。
1.2 声明枚举
声明枚举使用关键字 enum 就可以创建一个枚举类型。
// 创建一个名为color_enum的枚举类型,里面存放的是颜色
enum color_enum {red, blue, green, yellow};
声明中创建了color_enum作为标记名,允许把enum color_enum作为一个类型名使用。花括号内标识符枚举了color_enum变量可能有的值。因此color_enum的值可能是花括号中的任何一个,这些符号常量称为枚举符。
虽然枚举符(red, blue等)是int类型,但是枚举变量(color_enum)可以是任意整数类型,前提是该整数可以存储枚举常量。
注意:C的枚举特性有一些并不适用C++。例如,C允许枚举变量使用++运算符,但C++中并不支持。
1.3 enum常量
在上面的枚举符中到底是什么呢?技术上看,它们是int的类型的常量(从0开始)。
例如:
#include <stdio.h>
enum color {red, blue, green, yellow};
int main(void){
// 输出的结果为:0, 1, 2
printf("red = %d, blue = %d, green = %d", red, blue, green);
return 0;
}
默认情况下,枚举列表中的常量都被赋予0,1,2等,依次递增。
1.4 赋值
在枚举声明中,可以为枚举常量指定整数值:
enum color {red, blue=10, green, yellow};
在上述声明中,red默认为0,blue赋值为10,则green则会在10的基础上加1,yellow加2,如果后面还有变量,以此类推。
#include <stdio.h>
enum color {red, blue=10, green, yellow};
int main(void){
// 输出结果:red = 0, blue = 10, green = 11, yellow = 12
printf("red = %d, blue = %d, green = %d, yellow = %d", red, blue, green, yellow);
return 0;
}
二、typedef
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。这与#define类似,但是两者有3处不同:
1、与#define不同,typedef创建的符号名受限于与类型,不能用于值。
2、typedef由编译器解释,不是预处理
3、在其受限范围内,typedef比#define更灵活
例如:假设要用BYTE表示1字节的数组,只需像定义char类型变量一样定义BYTE,然后在定义前加上typedef关键字即可。
typedef unsigned char BYTE;
便可使用BYTE来定义变量
BYTE x;x
// 等价于:
unsigned char x;
typedef还可以用于结构:
type struct complex{
int num;
float f;
} COMPLEX
上述声明之后就可以使用COMPLEX类型代替complex结构。
用typedef来命名一个结构时,可以省略该结构的标签
type struct{
int num;
float f;
} COMPLEX