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