前言
前段时间我们讲完了指针和结构体, 这次我们来讲枚举类型, 什么是枚举呢? 打个比方, 比如我们一个星期有七天, 从周一到周日, 这是固定不变, 不可能无端端的跳出一个星期八出来, 在这种固定的情况下, 我们如果要写一个程序去固定这七天, 并且不让别人乱修改, 为了满足这个需求, 枚举就诞生啦.
开始
首先我们来看看一个需求, 一年固定有四个季节, 需要用枚举去实现, 那么我们要怎么做呢? 来看看下面这个例子吧:
#include
int main()
{
enum Season
{
spring,
summer,
autumn,
winter
};
enum Season s = spring;
enum Season b = 1000; //由于C语言是弱语法, 所以这样子赋值也是可以编译通过的
return 0;
}
上面这个例子就是最简单的枚举类型的定义以及使用, 在调用枚举类型的时候, 就只能用里面的四个枚举类型成员.
PS: 由于C语言是一种弱语法, 没有强硬规定别的值不可以给枚举类型使用, 所以给枚举类型变量随便赋值也是可以的, 但有是优秀的程序员都会严格要求自己去遵循一些书写规范, 希望大家也要严格要求自己.
补充知识:
我们说的枚举, 里面定义的几个枚举成员变量, 他们是怎么存储的? 其实他们是以整型常量类型存储的, 让我们来看看输出的结果如何:
#include
int main()
{
enum Season
{
spring,
summer,
autumn,
winter
};
enum Season s = spring;
printf("spring = %d\n", s);
return 0;
}
输出结果:
那么以此类推
summer 是1
autumn 是2
winter 是3
那如果我们改掉了其中一个值呢? 让我们来看看例子吧:
#include
int main()
{
enum Season
{
spring = 1,
summer,
autumn,
winter
};
enum Season a = spring;
enum Season b = summer;
enum Season c = autumn;
enum Season d = winter;
printf("spring = %d\n", a);
printf("summer = %d\n", b);
printf("autumn = %d\n", c);
printf("winter = %d\n", d);
return 0;
}
输出结果:
那如果我不是从头开始改变, 而是从中间某一个开始改呢?
让我们来继续看看:
#include
int main()
{
enum Season
{
spring = 1,
summer,
autumn = 10,
winter
};
enum Season a = spring;
enum Season b = summer;
enum Season c = autumn;
enum Season d = winter;
printf("spring = %d\n", a);
printf("summer = %d\n", b);
printf("autumn = %d\n", c);
printf("winter = %d\n", d);
return 0;
}
输出的结果:
由此我们可以看出, 默认是从0~3, 如果从头改掉一个, 那么后面就会逐渐的增加, 如果从中间开始改的话, 那么中间的那个值之后的枚举成员就会跟着那个被改值后继续增加.
说的有点拗口, 但大家可以根据上面的例子和图来自行理解, 相信大家都懂的.