枚举

  • 请声明一个变量保存一个人的性别 ,一个人的学历,一个方向,这样用 char 类型是不是不能全部给保存下,性别有男女两个值,但是你定义一个也只能保存一个值

  • 某些变量的取值是限定的,变量的取值只能是指定的几个值当中的任意一个,除此之外的不行

  • C语言没有提供那么我就自己定义一个限定取值的类型,枚举就可以

  • 作用:支持程程序员新创建一个类型,限定取值,比如使用结构体创建一个新的类型,置顶这个类型的变量只能存储东南西北中的任意一个,除此之外的不行

  • 如何使用枚举创建一个新的类型,来达到限定的取值

    • 语法格式:

          // 定义枚举类型的语法格式
          /*
           enum 新数据类型的名称 {
              取值 1,
              取值 2,
              取值 3,
              取值 4
           }
           */
          enum fangxiang{
              east,
              west,
              south,
              north
          }
      
    • 表示创建了一个数据类型,这个数据类型的名称叫做 enum fangxiang,可以声明这个类型的变量,这个变量中就只能存储这其中指定的任意一个

    • 声明一个枚举类型的变量

    enum fangxiang dir ;
    
    • 枚举变量的初始化
    enum fangxiang dir = east; // 这不是字符串,存储的是
    printf("dir = %d\n",dir);
    

枚举的注意事项

  • 枚举的作用域

    • 如果将枚举类型定义在函数内部,那么这个类型就只能在函数内部使用,定义在函数外部才可以给所有的函数使用

    • 枚举项,都偶有一个对应的整形的数,默认从 0 开始依次递增

    • 有多大?无论是什么类型的枚举变量都是占据 4 个字节

    • 存储的是什么?枚举变量当中真正存储的是整形的变量,所以才可以使用%d 打印出来

    • 如果你就要打印枚举值的话,写判读是 0 打印第一值,1 打印第二值

    • 既然存储的是一个整形的数,那么我们也可以存储大于枚举项的整数值,但是我们并不会这样做,这样可读性高

    • 默认情况下,每一个枚举值对应的整形的数从 0 开始依次递增,但是我们也可以指定整形的数

        enum xueli{
            xiaoxue = 10,
            chuzhong = 20,
            gaozhong = 30,
            daxue = 4
        };
    

使用规范

  • 枚举类型的名称命名规范:首字母大写,每一个单词的首字母大写
  • 枚举值的命名规范:枚举值的名称都以枚举类型开头,这样的好处在于不用每次都要去查看之前定义的这个枚举类型,
    enum Gender{
        GenderMan,
        GenderWomen
    };
    
    enum Gender xiaoMing = GenderMan;

typedef

  • typedef 类型定义
  • 作用:为一个已经存在的数据类型取一个别名,如果我们想要使用这个类型,直接使用这个别名就可以了
  • 语法格式:
    • typedef 已经存在的数据类型 别名
    typedef int intNew;
    intNew a = 10;
    printf("a = %i\n",a); // 这个时候 intNew 完全等价于 int


  • 什么时候为已经存在的数据类型取一个别名?
    • 当数据类型很长的时候就可以为这个数据类型取一个短一点的别名
    unsigned long long int num = 10;
    typedef unsigned long long int ulli;
    ulli num1 = 10; // 简化数据类型的名称i哦
  • 为结构体取一个别名
    • 第一种方式,先声明结构体类型,然后再使用 typedef 为这个结构体类型取一个别名
    • 第二种方式,直接在定义结构体的时候取别名
    // 定义完结构体再取别名
    struct Student{
        char *name;
        int age;
        int score;
    };
    typedef struct Student Student;
    Student s1 = {"小明",18,100};// 直接使用别名就可以了
    // 直接在定义结构体类型的时候就取个别名
    typedef struct Birth{
        int year;
        int month;
        int day;
    } Birth;
    Birth xiaoLan = {2020,8,4};
  • 第三种声明一个匿名,(最常用的)
    typedef struct {
        int height;
        int weight;
    } tiJi;
    tiJi picture = {2,4};
  • 为枚举类取一个短别名
    enum fangXiang{
        fangXiangEast,
        fangXiangWest,
        fangXiangSort,
        fangXiangNorth
    };
    typedef enum fangXiang fangXiang;
    fangXiang f1 = fangXiangEast;


    // 第二种
    typedef enum Gender{
        GenderMan,
        GenderWomen
    } Gender;
    Gender g1 = GenderMan;

    // 第三种
    typedef enum{
        xiaoxue,
        gaozhong,
        daxue
    } xueLi;
    xueLi x1 = xiaoxue;
posted on 2020-06-29 13:50  python我学的很菜  阅读(670)  评论(0编辑  收藏  举报