C语言学习记录——枚举(定义、与结构体的区别、优点)

文章介绍了枚举在C语言中的使用,包括枚举的定义、与结构体的大小对比,以及枚举相对于#define的优点,如增强代码可读性、提供类型检查、防止命名污染和便于调试。建议在适合的情况下优先使用枚举类型。
摘要由CSDN通过智能技术生成

简单介绍

枚举顾名思义就是一一列举,把可能的值一一列举,比如我们现实生活中:
一周的星期日到星期六是有限的7天,可以一一列举;
性别有:男、女、保密,也可以一一列举;
月份有12个,也可以一一列举。

枚举类型的定义

#include <stdio.h>
enum Day
{
    Mon,   //0
    Tues,  //1
    Wed,   //2
    Thur,  //3
    Fri,   //4
    Sat,   //5
    Sun    //6
};
enum Sex
{
    MALE = 5, //5
    FEMALE,   //6
    SECRET    //7
};
int main()
{
    enum Day d = Mon;
    printf("%d\n", d);
    enum Sex s = SECRET;
    printf("%d\n", s);
    return 0;
}

以上定义的enum Day,enum Sex都是枚举类型。{}里的内容是枚举类型的可能取值,也叫枚举常量。

这些可能取值都是有值的,默认从0开始,依次递增1,在定义的时候也可以赋初值。enum Sex中就是赋了初始值的。上面的代码运行起来的结果为:

枚举和结构体的区别

我们可以从他们的大小来验证这一点,例如:

#include <stdio.h>
enum Sex
{
    MALE , 
    FEMALE,   
    SECRET    
};
struct S
{
    char c1;
    char c2;
    int n;
};
int main()
{
    printf("int = %u\n", sizeof(int));
    printf("enum Sex = %u\n", sizeof(enum Sex));
    printf("struct S = %u\n", sizeof(struct S));
    return 0;
}

因为枚举类型中的枚举常量是整型,所以枚举类型的大小与int大小一致

代码运行结果为:

枚举的优点

我们可以使用#define定义常量,为什么非要用枚举?

因为枚举有许多优点:

1.增加代码的可读性和可维护性。
2.和#define定义的标识符比较,枚举有类型检查,更加严谨。
3.防止了命名污染(封装)。
4.便于调试。
5.使用方便,一次可以定义多个常量。

着重解释一下第3、4点。

防止命名污染

在枚举类型中定义的枚举常量,它是属于枚举类型范围内的;而如果用#define定义的则是属于全局的。

命名污染:如果定义了一个变量,在哪里都能被使用(全局),那么在使用它的过程中容易与其他相同名字的变量产生冲突,这种情况就叫做命名污染。

便于调试

总结

在可以使用#define定义和枚举类型定义的时候,我们都建议优先使用枚举类型,而不是#define定义。枚举类型的大小等于int的大小,使用枚举会更严谨一些。


学习自:比特鹏哥——C语言课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值