【落羽的落羽 C语言篇】自定义类型——联合体、枚举

server/2025/1/1 5:37:14/

在这里插入图片描述

文章目录

  • 一、联合体
    • 1. 联合体类型的声明
    • 2. 联合体的特点
    • 3. 联合体的大小
    • 4. 联合体和结构体的对比
  • 二、枚举
    • 1. 枚举类型的声明
    • 2. 枚举类型的优点

一、联合体

1. 联合体类型的声明

联合体像结构体一样,也是由一个或多个成员构成,这些成员可以是不同的类型。它和结构体的区别在于:编译器只为联合体的最大的成员分配足够的内存空间,所有成员共用这一块内存空间。所以,联合体有时也叫共用体。
它的声明形式是:

union name
{membermember......
};

道理和结构体极为相似,union是C语言中的一个关键字,name自起,member是成员。使用方法也和结构体很相似。

2. 联合体的特点

  • 因为联合体的成员是共用一块内存空间的,所以给其中一个成员赋值,其他成员的值也会跟着变化。

  • 一个联合体变量的地址和其中任意一个成员的地址都是相同的。

  • 结构体成员同一时间只能使用一个。

3. 联合体的大小

  • 一个联合体变量的大小至少是最大的成员的大小。
  • 当最大成员的大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍的地址偏移处。(关于对齐数,详见上期结构体)

4. 联合体和结构体的对比

struct s
{char c1;int i1;
};union u
{char c2;int i2;
};

根据内存对齐的规则,可以看到:

在这里插入图片描述

联合体相比结构体的优点是:在一些特定情况下,使用联合体不影响成员数据的使用,而可以节省内存空间。

在这里插入图片描述

二、枚举

1. 枚举类型的声明

枚举,顾名思义,一一列举,把可能的结果一一列举。
比如,星期一到星期日,可以一一列举。
一年的12个月,也可以一一列举。

枚举的声明方式是:

enum name
{member,member,......//注意,member后是逗号,最后一个成员后不写逗号
};

enum是C语言中的一个关键字,member是枚举类型的可能取值,也叫枚举常量。
这些所有的可能取值都是有值的,从0开始,依次加1。或者自定义可能取值的值,未自定义的默认是上一个枚举常量的值加1。
有了枚举常量,以后的代码中出现同一个变量时,这个变量自动被替换成它的枚举常量。

比如:

enum day
{Mon,//0Tues,//1Wed//2
};
//在下面的代码中,Mon就是0,以此类推enum color
{red=2,//2blue,//3green=5,//5yellow//6
};
//在下面的代码中,red就是2,以此类推

在这里插入图片描述

2. 枚举类型的优点

我们也可以用#define定义常量,为什么要有枚举的存在呢?
枚举独特的优点是:

  • 增加代码的可读性和可维护性。
  • 便于调试,预处理阶段会删除#define定义的符号。
  • 使用方便,一次可以定义多个变量。
  • 枚举常量遵循作用域规则,枚举声明在函数内的话,也就只能在函数内使用。

在这里插入图片描述

本篇完,感谢阅读


http://www.ppmy.cn/server/154279.html

相关文章

【大模型】wiki中文语料的word2vec模型构建

在自然语言处理(NLP)任务中,词向量(Word Embedding)是一个非常重要的概念。通过将词语映射到一个高维空间中,我们能够以向量的形式表达出词语之间的语义关系。Word2Vec作为一种流行的词向量学习方法&#x…

SPI接口

一、SPI总线 SPI接口是Motorola 首先提出的全双工三线/四线同步串行外围接口采用主从模式(Master Slave)架构。 时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB firs…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…

iDP3复现代码数据预处理全流程(二)——vis_dataset.py

vis_dataset.py 主要作用在于点云数据的可视化,并可以做一些简单的预处理 关键参数基本都在 vis_dataset.sh 中定义了,需要改动的仅以下两点: 1. 点云图像保存位置,因为 dataset_path 被设置为了绝对路径,因此需要相…

动态规划简介:爱的初体验

动态规划是一个让人欲仙欲死、死去活来的科目,茫然无措时让你痛不欲生,柳暗花明时让你喜不自胜。 小伙,不能啊! 你要心怀有爱,你要用全身心的爱来迎接今天,迎接动态规划。 一、动态规划的概念 动态规划…

不安全物联网的轻量级加密:综述

Abstract 本文综述了针对物联网(IoT)的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时,还对硬件与软件解决方案之间的比较进行了讨论,并分析了当前最受信赖且研究最深入的分组…

Python 敲电子木鱼,见机甲佛祖,修赛博真经

Python 敲电子木鱼,见机甲佛祖,修赛博真经 相关资源文件已经打包成EXE文件,可下载相关资源压缩包后双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例&…

【AI日记】24.12.28 kaggle 比赛 2-16

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset时间:7 小时 读书 书名:教育的本质时间:1.5 小时 律己 工作时间:差作息&#xff…