枚举类型与结构体的区别

一、枚举类型:

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 结构体总结:

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

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

结构体可以是不同类型的集合;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值