C语言-枚举 enum,typedef

摘要:
目录枚举说明。使用标准typedef枚举时,请说明变量可以存储一个人的性别、教育程度和方向。这样,是否不能使用char类型来存储所有字符。性别有两种价值观,男性和女性。但是,如果定义了一个值,则只能存储一个值。一些变量的值是有限的,并且变量的值只能是指定值中的任何一个。此外,如果C语言不提供数据,那么我将自己定义一个具有有限值的类型。可以使用枚举:支持程序员创建具有有限值的新类型,例如使用结构创建

目录

枚举

  • 请声明一个变量保存一个人的性别 ,一个人的学历,一个方向,这样用 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;

免责声明:文章转载自《C语言-枚举 enum,typedef》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF 读写XML文件学习笔记之pip的基本使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS-@inerface的11条规范写法

总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件。 1.读写权限 1.1实例变量的@public,@protected,@private关键字 1.2属性的readonly,readwrite关键字 2.前向声明 3.只暴露必要的接口和实现 3.1不要暴露任何只在类内部使用的...

C语言中access、_mkdir、sprintf、 fopen、fwrite函数

int access(const char *filename, intamode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。 这个函数还可以检查其它文件属性:06 检查读写权限04 检查读权限02 检查写权限01 检查执行权限00 检查文件的存在性而这个就算这个文件没有读权限,也可以判断这个...

(转)C语言中格式化日期时间asctime()函数详细讲解

函数原型:char *asctime(const struct tm *tblock); 功能说明:将tm结构类型时间日期转换为ASCII码。 头文件: 参数说明:语法:asctime[必要参数] 必要参数的具体说明如下: tblock:待转换的时间指针,tblock为一tm结构型指针。 返回值:返回由tm结构中的日期和时间转换成的字符串的地址,该字符串的...

C语言刷 堆(优先队列)

703. 数据流中的第 K 大元素 /* 小根堆 */ typedef struct { int heapCapacity; int heapSize; int *heap; } KthLargest; /* 堆顶下标: 0; parent: (k-1)/2; leftChild: 2*k + 1; rightChild: 2*k...

文件系统FatFsR0.09a翻译(三):ff.h

//本译文只供学习使用,未经作者许可,不得用于其它任何用途 //译者:xiaofeng //修改日期:2013/03/19 //版本:V1.0 //版权所有,盗版必究。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34...

wParam与lParam的区别

wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数。 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);wParam 通常用来存储小段信息,如,标志lParam...