C语言学习(十)之枚举和typedef

一、枚举

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

猜你喜欢

转载自blog.csdn.net/qq_46292926/article/details/127568947