C语言基础:C语言枚举 - 枚举类型的基本认识

前言

前段时间我们讲完了指针和结构体, 这次我们来讲枚举类型, 什么是枚举呢? 打个比方, 比如我们一个星期有七天, 从周一到周日, 这是固定不变, 不可能无端端的跳出一个星期八出来, 在这种固定的情况下, 我们如果要写一个程序去固定这七天, 并且不让别人乱修改, 为了满足这个需求, 枚举就诞生啦.


开始

首先我们来看看一个需求, 一年固定有四个季节, 需要用枚举去实现, 那么我们要怎么做呢? 来看看下面这个例子吧:

#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\n", 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\n", a);
    printf("summer = %d\n", b);
    printf("autumn = %d\n", c);
    printf("winter = %d\n", 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\n", a);
    printf("summer = %d\n", b);
    printf("autumn = %d\n", c);
    printf("winter = %d\n", d);

    return 0;
}

输出的结果:



由此我们可以看出, 默认是从0~3, 如果从头改掉一个, 那么后面就会逐渐的增加, 如果从中间开始改的话, 那么中间的那个值之后的枚举成员就会跟着那个被改值后继续增加.


说的有点拗口, 但大家可以根据上面的例子和图来自行理解, 相信大家都懂的.

posted @ 2015-01-10 15:24  背着吉他去流浪  阅读(672)  评论(0编辑  收藏  举报