Bootstrap

⾃定义类型:联合和枚举

目录

一 ⾃定义类型:联合【共⽤体】

        1   联合体类型的声明/定义/赋值

        2   联合体的特点

        相同成员的结构体和联合体对⽐

        4    联合体⼤⼩的计算

        5    联合的⼀个练习(大小端的判断)

二⾃定义类型:枚举

         1  枚举类型的声明

         2  枚举类型的使⽤

         2  枚举类型的优点

        

一    ⾃定义类型:联合

1   联合体类型的声明/定义/赋值
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型
但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体
给联合体其中⼀个成员赋值,其他成员的值也跟着变化

声明

  这里我们声明了一个联合体,里面有char、int两种元素。

定义/赋值

2   联合体的特点
       联合体的特点在于联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)
2.1联合的成员是共⽤同⼀块内存空间

上面代码的结果一样在一次证明了 联合的成员是共⽤同⼀块内存空间。

2.2      ⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)

     因为int占4个字节而char占一个字节所以结果为4,上面结果为4在一次证明⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)所以联合体相比于结构体更省空间,那联合体没有什么弊端吗?我们来看下面一个代码。

我们发现un.i的结果为97,在就是 联合体的弊端:不支持联合体成员的同时使用。

3  相同成员的结构体和联合体对⽐

结构体:

结构体内存分布:

 联合体:

 联合体内存分布:

4    联合体⼤⼩的计算

4.1规则:

联合的⼤⼩⾄少是最⼤成员的⼤⼩。
当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。
下面我们来看一个题目

为什么union Un1的结果是8呢?因为联合的⼤⼩⾄少是最⼤成员的⼤⼩即char c占5个字节在因为当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍,而5不是最⼤对⻬数(8)的整数倍,union Un2同理。

  5   联合的⼀个练习(大小端的判断)

二  ⾃定义类型:枚举

枚举顾名思义就是⼀ 列举,把可能的取值⼀ 列举。

1  枚举类型的声明

例如我们现实⽣活中: ⼀周的星期⼀到星期⽇是有限的7天,可以⼀ 列举

注意:默认情况下枚举的可能取值都是有值的,默认从0开始,依次递增1。

例如什么代码结果

根据:默认情况下枚举的可能取值都是有值的,默认从0开始,依次递增1。即Mon=0,在依次递增1。

声明枚举类型的时候也可以自由赋初值。

枚举类型的使⽤

  注意:那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。

枚举类型的优点
  为什么使⽤枚举? 我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?
枚举的优点:
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使⽤⽅便,⼀次可以定义多个常量
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

本篇文章就到此结束,欢迎大家订阅我的专栏,欢迎大家指正,希望有所能帮到读者更好的了解联合和枚举,觉得有帮助的还请三联支持一下~后续会不断更新C/C++相关知识,我们下期再见。

;