zoukankan      html  css  js  c++  java
  • C语言-枚举 enum,typedef

    枚举

    • 请声明一个变量保存一个人的性别 ,一个人的学历,一个方向,这样用 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
      ",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
    ",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;
    
  • 相关阅读:
    Practice II 字符串
    Euleriar Path 入门
    2-SAT 入门
    Practice I 图论
    游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数
    JQuery教程:实现轮播图效果
    HTML表格应用
    菜鸟Vue学习笔记(三)
    Java成神路上之设计模式系列教程之一
    JVM垃圾回收机制之对象回收算法
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/13207620.html
Copyright © 2011-2022 走看看