找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2354|回复: 12

枚举类型与结构体的区别

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1355

回帖

2万

积分

管理员

积分
21304
发表于 2021-5-19 20:24:15 | 显示全部楼层 |阅读模式
一、枚举类型:

1.1、定义:

        是指将变量的值一 一列出来,变量的值只限于列举出来的值的范围内;

1.2、使用格式: 举例说明:

        enum DAY
        {
            MON=1,

            TUE,

            WED,

            THU,

             FRI,

             SAT,

             SUN
         };

格式注意事项说明:

1.2.1、枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

1.2.2、DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。

1.2.3、 未认为设定枚举成员值时,第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。

1.2.4、可以人为设定枚举成员的值,从而自定义某个范围内的整数。

1.2.5、 枚举型是预处理指令#define的替代。

1.2.6、类型定义以分号;结束。

1.3、枚举的优点

1.3.1、增加代码的可读性和可维护性

1.3.1、和#define定义的标识符比较枚举有类型检查,更加严谨

1.3.1、防止了命名污染(封装)

1.3.1、便于调试

1.3.1、使用方便,一次可以定义多个常量

那这样做的好处是什么呢? 举例说明:
看以下代码:

int chose;
printf("%d",&chose);
switch (chose)
{
case 1:            
    Add();              //执行加法
    break;
case 2:
    Sub();              //执行减法
    break;
case 3:                 
    Mul();              //执行乘法
    break;
case 4:
    Div();              //执行除法
    break;
case 0:
    return 0;           //退出
}
这是一个建议计算器的选择模块,如果使用 switch 语句,后面的 case后面的数字代表不同的算法。像以上代码,如果算法增加到即使或者更多,那么,数字和算法可能会匹配乱掉,但是,如果改为用枚举变量,那么代码的可读性以及思路清晰程度会大大提高。如下:

    enum shose
{
    EXIT,
    ADD,
    SUB,
    MUL,
    DIV
};
int chose;
printf("%d",&chose);
switch (chose)
{
case ADD:            
    Add();              //执行加法
    break;
case SUB:
    Sub();              //执行减法
    break;
case MUL:                  
    Mul();              //执行乘法
    break;
case DIV:
    Div();              //执行除法
    break;
case EXIT:
    return 0;           //退出
}
这就很清楚的体现了枚举类型的用途;

二、结构体类型


2.1、定义:

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。

2.2、结构体的格式形式为:

struct 结构体名{
    结构体所包含的变量或数组
};

结构体定义的三种方式:

第一种:只有结构体定义

struct stuff{
        char job[20];
        int age;
        float height;
};

第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义

//直接带变量名Huqinwei
struct stuff{
        char job[20];
        int age;
        float height;
}Huqinwei;
也许初期看不习惯容易困惑,其实这就相当于:

struct stuff{
        char job[20];
        int age;
        float height;
};
struct stuff Huqinwei;

第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用

struct stuff yourname;
去定义第二个变量。

那么,附加变量初始化的结构体定义还可进一步简化出第三种:

把结构体名称去掉,用匿名结构体直接定义一个结构体对象(习惯用对象这词了),这样更简洁,不过也不能定义其他同结构体变量了——除非用typeof。

struct{
        char job[20];
        int age;
        float height;
}Huqinwei;


2.3 结构体总结:

结构体的内存对齐是拿空间来换取时间的做法。

那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到:让占用空间小的成员尽量集中在一起

结构体可以是不同类型的集合;
————————————————
版权声明:本文为CSDN博主「fab189」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fab189/article/details/98521155

工控课堂 www.gkket.com

0

主题

113

回帖

268

积分

注册会员

积分
268
发表于 2021-5-19 21:58:14 | 显示全部楼层
楼主加油,我们都看好你哦。
工控课堂 www.gkket.com

0

主题

68

回帖

282

积分

注册会员

积分
282
发表于 2021-5-20 11:29:09 | 显示全部楼层
看到这帖子真是高兴!
工控课堂 www.gkket.com

0

主题

75

回帖

117

积分

新手上路

积分
117
发表于 2025-11-14 08:17:00 | 显示全部楼层
理性围观,感觉大家说的都有道理~
工控课堂 www.gkket.com

0

主题

453

回帖

2302

积分

高级会员

积分
2302
发表于 2025-11-14 08:25:00 | 显示全部楼层
打卡路过,支持优质原创内容~
工控课堂 www.gkket.com

0

主题

92

回帖

276

积分

注册会员

积分
276
发表于 2025-11-14 09:17:53 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

128

回帖

206

积分

注册会员

积分
206
发表于 2025-11-14 12:14:38 | 显示全部楼层
浅评一下:内容优质,值得推荐~
工控课堂 www.gkket.com

0

主题

220

回帖

723

积分

中级会员

积分
723
发表于 2025-11-14 19:30:11 | 显示全部楼层
蹲个后续,楼主记得更新呀,在线等挺急的~
工控课堂 www.gkket.com

0

主题

187

回帖

741

积分

中级会员

积分
741
发表于 2025-11-14 19:33:09 | 显示全部楼层
楼主辛苦啦,期待下一篇分享!
工控课堂 www.gkket.com

0

主题

87

回帖

131

积分

新手上路

积分
131
发表于 2025-11-14 19:36:34 | 显示全部楼层
赞同 + 10086,没毛病,完全没毛病
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 07:37 , Processed in 0.205404 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表