C语言基础:枚举与类型定义

        一、枚举类型

        枚举类型是C语言中的一种特殊类型,枚举类型可以让我们的程序使用一些固定长度和固定数值的变量值范围。定义枚举类型使用如下方式:

enum 枚举类型 {枚举值列表};

        例如,我们可以定义一个枚举类型的值范围是周日至周五的星期类型,或一月至十二月的月份类型:

enum week
{
	Su, Mo, Tu, We, Th, Fr, Sa
};

enum month
{
	January, February, March, April, May, June, July, August, September, October, November, December
};

 

        定义了枚举类型之后,就可以根据需要定义枚举类型的变量,并使用它们,例如:

 

enum week a, b, c;
a = Su;
b = Mo;
c = Tu;

enum month d, e, f;
d = January;
e = February;
f = March;

        那么枚举类型的值究竟是多少呢?我们可以使用printf函数来将a、b、c、d、e、f这6个变量的值显示出来,显示格式指定为整型:

 

enum week a, b, c;
a = Su;
b = Mo;
c = Tu;
printf("%d %d %d\n", a, b, c);
enum month d, e, f;
d = January;
e = February;
f = March;
printf("%d %d %d\n", d, e, f);

0 1 2
0 1 2

        可以看到枚举类型的值其实就是从0开始正整数的序列,也就是说枚举类型其实是为了编程者方便的书写和理解程序代码而设定的一种具有特定使用功能的变量,这些变量的值其实就是从0开始的正整数。其实枚举类型与整数类型没有什么太大的区别,例如我们同样可以定义两个int类型的变量表示星期和月份,对星期变量赋值时采用0~6表示周日到周五,而对月份赋值时采用0~11表示一月到十二月。

        定义枚举类型的好处是可以让编程者方便的使用自定义的变量值来替代数字值,这样会使我们的代码有更高的可读性,而从本质上讲枚举除了在代码中是以文字形式出现的变量值之外(内部还是数字)与整数值其实并没有什么区别。

 

        二、类型定义

        使类型定义时需要使用类型定义符typedef,它的功能是可以将一个原有的变量类型定义一个新的变量类型,例如:

 

typedef char s8;
typedef unsigned char u8;
typedef short s16;
typedef unsigned short u16;
typedef int s32;
typedef unsigned int u32;
typedef long long s64;
typedef unsigned long long u64;

typedef enum week eweek;
typedef enum month emonth;

        其实定义新的数据类型这种说法并不准确,typedef关键字只不过是让编译器将原有的数据类型设定一个新的类型名称,而使得程序可以使用这些新的类型名来表示原来的类型。例如原来的unsigned char类型、unsigned short类型、enum week类型和enum month类型被设定了新在类型名称u8、u16、eweek和emonth,所以在程序中可以直接这样来使用,而使用了新类型的变量与原来类型的变量没有任何区别:

 

u8 a = 0;
u16 b = 1;
eweek c = Mo;
emonth d = September;

 

        类型定义符typedef不仅仅可以对这些基本数据类型进行重新定义其名称,在后续章节中我们还将要学习指针类型、结构体类型、联合体类型等等,类型定义符typedef同样可以使用在这些类型上面,使程序代码变成我们自定义的样子。


欢迎关注公众号:编程外星人


你可能感兴趣的:(C语言基础)