自定义类型(3)

目录

1.枚举

1.1枚举类型的定义

1.2枚举的优点

1.3枚举的使用

2.联合体(共用体)

2.1联合类型的定义

2.2联合体的特点

2.3联合大小的计算


1.枚举

枚举就是一一列举,把所有可能的取值一一列举

比如生活中的例子:

一周的有7天,从星期一到星期日,可以一一列举

比如在填写性别时,有男、女、保密

月份有12个月可以一一列举

只要是可一一列举的,就可以用到枚举,枚举是C语言中的一种类型

1.1枚举类型的定义

 打印出来的结果:

 枚举常量的值是不可以更改的,但是给常量一个值,如果不给值,就是0,下面的常量依次加一,但是如果给常量一个值,后面的常量就是从这个值开始依次+1

1.2枚举的优点

为什么使用枚举?

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

枚举的优点:

  • 1.增加代码的可读性和可维护性
  • 2.和#define定义的标识符比较枚举有类型检查,更加严谨
  • 4.便于调试
    • test.c到test.exe,test.c要经历预处理(预编译)、编译、汇编、链接才能到test.c
    • 假设#define RED 5,在主函数中将某一变量(num)赋值为RED(num=RED),经过预处理后num=5,上面经过预处理后#define RED 5就会被删掉(这该删的就删除了,该替换的就替换了),产生可执行程序之后才能进行调试,num经过编译、汇编、链接之后已经变成二进制了,此时进行调试时早就没有预定义符号了,所以枚举类型更加便于调试
  • 5.使用方便,一次可以定义多个常量

1.3枚举的使用

enum Color
{
    RED=1,
    GREEN =2,
    BLUE=4
};
int main()
{
    enum Color clr=GREEN;
}

注意:只能拿枚举常量给枚举变量赋值,才不会出现类型的差异

2.联合体(共用体)

2.1联合类型的定义

联合也是一种特殊的自定义类型

这种类型定义的变量也包含一系列的成员,其特征是这些成员共用同一块空间(所以联合也叫共用体)  

联合的关键字是union

联合体大小的计算

 此时我们发现它们真的是共用同一块儿空间的

结构体中的信息必须同时存在,但是联合体的成员不必同时存在-->用其中的一个成员时不用另外的成员,只要能够满足我们使用的需求就可以了

2.2联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大得那个成员)

大小端的判断

什么是大小端?

一个数值,存储时需要的内存空间只要超过一个字节,就涉及顺序的问题

比如:0x 11 22 33 44

 vs2019编译器是小端存储

 

 这里就是利用了联合体的特点,共用同一块儿空间

2.3联合大小的计算

  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

 数组的每个成员的类型是char类型对齐数是1,int类型的对齐数是4,所以要对齐到4的整数倍,数组会浪费一个空间,此时就是8个字节

short的对齐数是2,默认对齐数是8,所以short的对齐数是2,int的对齐数是4,默认对齐数是8,所以int的对齐数是4,它们之中最大对齐数是4,而short的大小是12个字节正好是4的整数倍,所以这个联合体的总大小是12个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值