• C语言学习(十)之枚举和typedef


    一、枚举

    1.1 什么是枚举

    C语言中还有一种枚举类型。枚举就是将预先定义好的值装在枚举类型中,使用起来比较方便。

    实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型。枚举的目的是提高程序的可读性。


    1.2 声明枚举

    声明枚举使用关键字 enum 就可以创建一个枚举类型。

    // 创建一个名为color_enum的枚举类型,里面存放的是颜色
    enum color_enum {red, blue, green, yellow};
    
    • 1
    • 2

    声明中创建了color_enum作为标记名,允许把enum color_enum作为一个类型名使用。花括号内标识符枚举了color_enum变量可能有的值。因此color_enum的值可能是花括号中的任何一个,这些符号常量称为枚举符。

    虽然枚举符(red, blue等)是int类型,但是枚举变量(color_enum)可以是任意整数类型,前提是该整数可以存储枚举常量。

    注意:C的枚举特性有一些并不适用C++。例如,C允许枚举变量使用++运算符,但C++中并不支持。

    1.3 enum常量

    在上面的枚举符中到底是什么呢?技术上看,它们是int的类型的常量(从0开始)。

    例如:

    #include 
    
    enum color {red, blue, green, yellow};
    
    
    int main(void){
    	// 输出的结果为:0, 1, 2
    	printf("red = %d, blue = %d, green = %d", red, blue, green);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    默认情况下,枚举列表中的常量都被赋予0,1,2等,依次递增。

    1.4 赋值

    在枚举声明中,可以为枚举常量指定整数值:

    enum color {red, blue=10, green, yellow};
    
    • 1

    在上述声明中,red默认为0,blue赋值为10,则green则会在10的基础上加1,yellow加2,如果后面还有变量,以此类推。

    #include 
    
    enum color {red, blue=10, green, yellow};
    
    
    int main(void){
    
    	// 输出结果:red = 0, blue = 10, green = 11, yellow = 12
    	printf("red = %d, blue = %d, green = %d, yellow = %d", red, blue, green, yellow);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、typedef

    typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。这与#define类似,但是两者有3处不同:

    1、与#define不同,typedef创建的符号名受限于与类型,不能用于值。
    2、typedef由编译器解释,不是预处理
    3、在其受限范围内,typedef比#define更灵活
    
    • 1
    • 2
    • 3

    例如:假设要用BYTE表示1字节的数组,只需像定义char类型变量一样定义BYTE,然后在定义前加上typedef关键字即可。

    typedef unsigned char BYTE;
    
    • 1

    便可使用BYTE来定义变量

    BYTE x;x
    // 等价于:
    unsigned char x;
    
    • 1
    • 2
    • 3

    typedef还可以用于结构:

    type struct complex{
    	int num;
    	float f;
    } COMPLEX
    
    • 1
    • 2
    • 3
    • 4

    上述声明之后就可以使用COMPLEX类型代替complex结构。

    用typedef来命名一个结构时,可以省略该结构的标签

    type struct{
    	int num;
    	float f;
    } COMPLEX
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    Python内置函数--eval()
    女生学java开发难吗?女生适合学java吗?
    ▲ Android 签到打卡效果
    基于Windows编译someip
    (2)paddle---简单线性回归和波士顿房价预测
    PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一)
    C++中set/multiset容器(黑马程序员)
    如何从异步调用中返回响应
    【ORACLE】Oracle里有“time”数据类型吗?--关于对Oracle数据类型的一点研究
    idea:java: Compilation failed: internal java compiler error
  • 原文地址:https://blog.csdn.net/qq_46292926/article/details/127568947