C语言(联合和枚举)

news2024/11/16 21:42:21

1.联合创建

联合是一种数据类型,它能在同一个内存空间中存储不同的数据类型(非同时存储)

创建联合和创建结构的方式相同,需要一个联合模板和联合变量。使用关键字union

union hold{

        int digit;

        double bigfl;

        char letter;

}

以上形式声明的结构可以存储一个int类型,一个double类型和char类型的值。然而,声明的联合只能存储一个int类型的值或一个double类型的值或char类型的值

union hold fit;  //hole类型的联合变量

union hold save[10];  //内含10个联合变量的数组

union hole * pu  //指向hold类型联合变量的指针

第一个声明创建了一个单独的联合变量fit,编译器分配足够的空间以便它能存储联合声明中占用最大字节的类型。在本例中,占用空间最大的是double类型的数据,每个占8字节。

第二个声明创建一个数组save,内含10个元素,每个元素都是8字节

第三个声明创建了一个指针,该指针变量存储hold类型联合变量的地址

2.联合使用

union hold{

        int digit;

        double bigfl;

        char letter;

}

union hold fit;

fit.digit = 23;  //把23存储在fit,占2字节

fit.bigfl = 2.0;  //清除23,存储2.0,占8字节

fit.letter = 'h'  //清除2.0,存储h,占1字节

下面我们来看一个例子

这里我们创建了一个联合结构p和一个联合结构指针pf。虽然我们只给letter成员初始化了值,但我们可以看到系统给到结构p的大小是8个字节。

而pf指针可以使用的值也是letter成员的值(就算你声明要使用digit,这主要巴字节空间二进制是一样,不管用那个成员,用的都是这些二进制的值)

3.匿名联合(C11)

匿名联合和匿名结构的工作原理相同,即匿名联合是一个结构或联合的无名联合成员

Struct car_data{

        char make[15];

        int status;

        union{

                struct owner owncar;

                struct leasecompany leasecar;

        };

}

在这个例子中,更具结构当中sta的状态,我们选择打印年纪或者身高(本案例中联合变量类型放在一起其实不太合理,在打印float的时候会产生错误。这里主要为了讲解使用方法)

4.枚举类型

枚举类型声明符号名称来表示整型常量,使用enum关键字,可以创建一个新“类型”并指定它可具有的值,而实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型

enum spectrum{red,orange,yellow,green,blue,violet};

Enum spectrum color;  //color可能的值是red,orange,yellow等。这些符号常量被称为枚举符

枚举类型的目的是为了提高程序可读性和可维护性。如果要处理颜色,使用red和blue比使用0和1更直观。

需要注意,枚举类型只能在内部使用,如果要输入color中orange的值,只能输入1,而不是单词orange。或者,让程序先读入字符串"orange",在将其转换为orange代表的值                                                                                                                    

5.枚举赋值

enum spectrum{red,orange,yellow,green,blue,violet};

enum spectrum color;

正常情况下,color枚举的值对应是0~5

而如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值

enum spectrum color{red,orange=10,yellow,green,blue,violet};

red默认值是0,而orangeyellow,green,blue,violet的值分别是10,11,12,13,14

这里我们来看一个例子

这里我们先判断枚举结构变量color的值是否是red。变量名默认是是第一个元素的值(和数组差不多,数组名是第一个元素的地址),所以条件判断成功,所以开始for循环,通过color的值(red 就是 1)来充当colors数组的字符串值。


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十、STM32端口复用重映射

目录 1.什么是端口复用? 2.如何配置端口复用? 3.什么是端口重映射 ? 4.什么是部分重映射和完全重映射? 5.重映射的配置过程 1.什么是端口复用? STM32有很多外设,外设的外部引脚与GPIO复用。也就是说一…

Vue|初识Vue

Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 初识Vue1. Vue简介2. 开发准备3. 模板语法3.1 差值语法3.2 指令语法4. 数据绑定4.1 单向数据…

工厂模式详解

工厂模式 工厂模式顾名思义就是生产实例的工厂,使用工厂模式不会在程序中使用new关键字创建实例。而是将创建对象的细节隐藏,对外提供统一的方法,外部通过该方法获取实例。以此降低调用者与程序之间的耦合性,更加灵活 工厂模式可…

ccc-Brief Introduction of Deep Learning-李宏毅(6)

文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …

sql的case when用法详解

简单CASE WHEN函数: CASE SCORE WHEN A THEN 优 ELSE 不及格 END CASE SCORE WHEN B THEN 良 ELSE 不及格 END CASE SCORE WHEN C THEN 中 ELSE 不及格 END等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE A THEN 优WHEN SCORE …

数据存储领域的“归档Archive”

档案圈的朋友想必对档案领域的“归档”一词已经耳熟能详,按照DA/T 58-2014《电子档案管理基本术语》中的定义,归档(Archiving)是指“按照国家规定将具有保存价值的电子文件及其元数据的保管权交给档案部门的过程”。 今天我们要聊…

FreeRTOS任务通知 | FreeRTOS十二

目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …

STL中重要容器vector总结

你要尽全力保护你的梦想。那些嘲笑你的人,他们必定会失败,他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去实现。 ——《当幸福来敲门》引言:C中STL里面的容器用法很巧妙,可以解决很多复杂的模型&#xff…

LEADTOOLS 22.0.6 UPDATE-Crack

OCR SDK 库 许多 OCR 增强功能 LEAD 行业领先的人工智能 OCR SDK 在以下方面获得了显着的识别优化:斜体、大写和小写字母、文本行组装和单词构建、列检测、基线检测和文本行分割。 LEADTOOLS为.NET 6、. NET Framework、Xamarin、UWP、C#、VB、C/C、Java、Objective…

OpenCV形态学处理

OpenCV形态学处理1、膨胀2、腐蚀3、开/闭运算4、示例膨胀、腐蚀、开运算、闭运算 1、膨胀 膨胀就是求局部最大值的操作,膨胀的数学表达式: dst⁡(x,y)max⁡(x′,y′):1ement⁡(x′,y′)≠0src⁡(xx′,yy′)\operatorname{dst}(x, y)\max _{\left(x^{\pr…

搭建mysql主从复制

前言: 👏 作者简介:我是笑霸final,一名热爱技术的在校学生。 📝 个人主页:个人主页1 || 笑霸final的主页2 📕 系列专栏:数据库 📧 如果文章知识点有错误的地方&#xff0…

缺失数据的处理

1:方括号里写数组,是对行进行操作,方括号里写字符串,是对列进行操作 dfdf.sort_values(byCount_AnimalName,ascendingFalse) #print(df.head(5)) print(df[:20]) print(df[Row_Labels]) print(type(b))2:t3.loc(定位取…

程序的编译与链接(预处理详解)+百度面试笔试题+《高质量C/C++编程指南》笔试题

本篇重点介绍程序的编译与链接过程中的预处理阶段,将详细的介绍在预处理阶段会发生什么,以及讲解有关百度该内容的面试笔试题和源于《高质量C/C编程指南》的笔试题。一.【预处理详解】①预定义符号②#define2.1 #define 定义标识符注意:2.2 #…

常见的EMC问题

电磁兼容设计的目的就在于满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求,并且使产品不会对系统中的其它设备产生电磁干扰。 电磁兼容设计中常见的问题有哪些? 1、电磁兼容设计可以从电路设计(包括器件选择&…

69. open函数—打开文件并返回文件对象

69. open函数—打开文件并返回文件对象 文章目录69. open函数—打开文件并返回文件对象1. open() 函数的作用2. open函数语法参考3. open()函数参数说明1. file参数2. encoding 参数3. errors参数4. mode参数4. mode参数详解1. 准备工作2. w 写入模式3. a 追加模式4. r 只读模式…

RabbitMQ学习总结(10)—— RabbitMQ如何保证消息的可靠性

一、丢失场景 RabbitMQ丢失的以下3种情况: (1)生产者:生产者发送消息至MQ的数据丢失

布隆过滤器的使用

目录说明使用布隆过滤器使用测试Java 本地使用布隆过滤器Java集成Redis使用布隆过滤器说明 布隆过滤器是用来防止缓存穿透的,我们需要知道如何使用布隆过滤器。 使用 Google 的 Guava 库提供了使用布隆过滤器的 API 类(BloomFilter.class)&…

ubuntu 创建raid5教程

1、查看磁盘:parted -l 2、安装创建raid工具mdadm: sudo apt install mdadm 3、创建命令: sudo mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd 说明: -Cv: 创建一个阵列并打印出详细信息 /dev/md0: 阵列名称 -l5: 指定阵列类型为 R…

Linux管道排序命令:sort、wc、uniq

sort 它可以根据不同的数据形式来排序,例如数字与文字的排序就不一样。此外,排序的字符与语系的编码有关,因此我们需要排序时,建议使用LANGC来让与系统统一,数据排序比较好一些 sort 【-fbMnrtuk】【file or stdin】 …

java: 错误: 不支持发行版本 5(快速解决办法)

目录 前言 一、出现报错 二、报错的原因 三、解决办法 四、解决成功 前言 在maven web项目上面要部署运行tomcat时候,会出现这个问题 一、出现报错 java: 错误: 不支持发行版本 5 二、报错的原因 (1)官方解释:这个错误…