C-语言联合体和枚举

1、联合体

联合体的写法格式跟结构体的是一样的;

联合体会以最大的变量成员的大小开辟内存空间,所有成员共用一块空间;如果其中的一个成员的值变量,其他的成员变量也会跟着一起变;

2、计算联合体的大小

因为联合体会以最大的成员开辟空间,所以它的大小至少是最大成员的大小,但它不一定是联合体的大小;

比如这个列子;最大的是c,占7个字节;开辟7个字节的空间,但是这不是联合体的最终大小,而是它至少是7个字节;我们根据它的对齐规则,得知它的最终大小一定是4的整数倍;往后数,结果是8,因为它是4的整数倍;

3、联合体和结构体相比

结构体在内存的存储当中会浪费掉一些内存空间,而联合体会整合成一块内存空间;但是其中一个成员变量变了,就全变了;联合体适用多个成员变量里面只用一个成员变量的情况;

比如在联合体里的a里存放1;因为int是最大的成员;联合体开辟了4个字节的空间;又是共用内存空间,所以前面的第一个字节就属于char和int;其中任意一个成员变量,就全变了;

比如我们用联合体判断一个机器是小端字节序,还是大端字节序

跟上面的例子类似,把联合体的a赋值为1,如果是小端的话,只用看第一个字节是否为1就行;由于共用一块内存空间,根据存储的方式,我只用取第一个字节char c就可以了;

4、枚举

枚举就是列举出可能出现的值;

比如颜色,红,蓝,绿;

enum是枚举的关键字;跟结构体类似,enum color是结构体的类型;

Green,RED,Blue是枚举常量,能列举出来的值;

第一个枚举常量的值是0,然后按顺序来是1,2;当然也是给它赋值初始值,比如给RED=4;第一个枚举常量还是0;但是因为赋初始值,常量值变了,不过还是按照顺序往后排;0,4,5;

如果枚举是常量,Green是0,RED是4,那为什么不用#define呢?

  1. 增加代码的可读性和可维护性,比如给枚举变量赋值0,1,2;是不知道代表什么,但是直接给一个Green就很好了解多了;
  2. 和#define相比,枚举对类型的检测严谨,它最会是常量;
  3. 便于调试,预处理会删除#define定义的符号
  4. 使用方便,一次可以定义多个常量
  5. 枚举常量遵守作用域规则,只能在函数里声明和使用

5、枚举的使用

感谢观看

相关推荐
钢琴上的汽车软件4 小时前
C 语言中const与指针:三种常见写法辨析
c语言·指针和const
ZK_H4 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
ambition202425 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_5 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
yashuk6 小时前
C语言实现PAT练习及算法学习笔记,还有SQLite介绍
c语言·sqlite·开源项目·算法学习·pat练习
ACP广源盛139246256736 小时前
破局 Type‑C 切换器痛点@ACP#GSV6155+LH3828/GSV2221+LH3828 黄金方案
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
爱编码的小八嘎7 小时前
C语言完美演绎7-10
c语言
hhh3u3u3u9 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
泛凡(Linyongui)9 小时前
PY32F002B实践之二--宠物腹背理疗仪项目介绍及头文件解析
c语言·keil·py32·32位单片机·腹背理疗仪项目实践
网域小星球11 小时前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf