【C语言】联合体枚举的讲解

news2025/1/6 19:25:20

d9c25ccd4d724b3493e47f53f297808c.png

目录

✨声明!!!:

联合体与结构体只有一个区别,那就是内存存储方式不同

💕1.联合体的声明

💕2.联合体内存的存储

💕3.联合体字节大小的计算

例题2:

✨4.枚举的声明

✨5.枚举类型的优点 

6.C/C++中枚举的不同 


小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 


✨声明!!!:

联合体与结构体只有一个区别,那就是内存存储方式不同


💕1.联合体的声明

联合体的声明与结构体的声明相同

详见的可看文章:【C语言】结构体超详细全讲解 (代码+万字文字+画图讲解)-CSDN博客

这里还是再演示一下:

union stu //联合体类型的声明,联合体类型为union stu
{
	char c1;
	int i;
	//联合体的内容
}b1;    //创建联合体变量b1

联合体的声明,赋值,使用,访问联合体成员等等都与结构体一模一样,这里不再多做讲解


💕2.联合体内存的存储

在联合体中也是如此,联合体中所有的联合体成员共用一块内存,并且所有联合体内容的内存起始位置都是相同的

什么叫共用同一块内存?图例如下

3772af6904ee4f729ed65c4362ccb254.jpeg

在此图中,联合体内容 c 与联合体内容 i,共用了同一块内存空间,可能还不够直观,我们再利用代码观察一下

a03a5d8f0a684538af28b76f4482b085.png

我们会发现,低位地址的内容,经过b1.c1 = 0x55执行后,i 变成了0x11223355

这就是因为联合体成员占用的是同一块内存的原因

如果我们将地址打印出来,我们会发现打印出来的地址也是一样的

cdc003f409fb48efb5583a9dd5d35b1b.png


💕3.联合体字节大小的计算

计算联合体字节的大小,要遵循以下两条规则

1.联合体的大小至少是最大成员的大小

2.当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍

例题1如下:

	union Un1 {
		char c[5];
		int i;
	};
	
	printf("%zd", sizeof(union Un1));
	//打印8

union U1 开辟了5个字节大小的内存空间,联合体成员最大对齐数为4(i),因此,联合体的字节大小要对齐到最大对齐数的整数倍,即8 

d3a1535c76a34d9799d64a53c5f63b3a.jpeg

过程与结构体字节大小计算完全一样,详见可见这里【C语言】结构体超详细全讲解 (代码+万字文字+画图讲解)-CSDN博客


例题2:

union Un2 {
	short c[7];
	int i;
};

printf("%zd", sizeof(union Un2));
//打印16

union U2 开辟了14个字节大小的内存空间,联合体成员最大对齐数为4(i),因此,联合体的字节大小要对齐到最大对齐数的整数倍 ,即16

ce0b25b0c87448a9a07517778d6fdb6e.jpeg


✨4.枚举的声明

生活中的某些取值可以被一一列举出来,把这些取值抽象成一种类型,就是 枚举类型

枚举类型的声明与结构体相似,enum 是枚举类型的关键字

例如星期一,星期二,星期三到星期日这些取值可以被抽象成星期类型

枚举的声明举例:

enum Day//星期
{
    Mon,
    Tues,
    Wed,
    Thur,
    Fri,
    Sat,
    Sun
};
 
enum Color//颜⾊
{
    RED,
    GREEN,
    BLUE
};

需要注意:声明枚举类型的每个取值最后以逗号结尾,但是最后一个的取值不用以任何符号形式结尾

枚举类型的的取值如Mon,Tues,Wed,这些枚举常量都是有默认取值的,枚举类型的第一个常量(取值)默认是0,往下每个常量依次递增

11deea09043f4ea0ab93ce0d2445e9c0.png

枚举类型的枚举常量对应的值是可以在定义的时候进行修改的,但是不能在定义后进行修改,不然就会报错

4826954edbef4229ba0462b1377168cd.png

可以发现,在改变枚举常量后,往后的枚举常量对应的值是顺着递增的,我们可以在任意内容上对枚举常量对应的值进行修改,如图:

42e338f90b5046fca4aec57ed92ba9eb.png


✨5.枚举类型的优点 

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

增加代码的可读性和可维护性
和#define定义的标识符比较枚举有类型检查,更加严谨
便于调试,预处理阶段会删除 #define 定义的符号
使用方便,一次可以定义多个常量
枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用


6.C/C++中枚举的不同 

在C语言中,可以将 0 赋值给enum Color 类型的 d,而在C++中却不行对比如下:

 0b749e25fab24438a9e99cbb4e330b38.png            


在C++中,如果想通过以下类型给d赋值,就会失败,因为d是枚举变量,它的类型是enum Color ,而 0 的类型是int 型,在C++中,要求的比较严格,因为类型不匹配所以不能赋值

2d7fbd18d3594b50a8aa4eb4f557108e.png

 8fdd48caf53e46a897fd8a5554dbb454.png

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

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

相关文章

2024最新股票系统源码 附教程

1.环境 环境 php7.4 sql 5.7 Nginx1.2 tomcat-8 redis 放行1-65535 2.创建5个网站。xxx.com替换你的域名 ftp.xxx.com api.xxx.com agent.xxx.com admin.xxx.com wap.xxx.com api设置反向代理 代理名称 api 目标URL http://127.0.0.1:8091 新建ftp 目录指向新建的…

绝缘子缺陷检测数据集

绝缘子缺陷检测数据集,2800张高清照片,已打好标签txt格式,可直接进行目标检测。7类标签:玻璃绝缘子,玻璃片脏污,玻璃片缺损,聚合物片脏污,聚合物片缺损,聚合物绝缘子&…

K8S - Access Control 机制介绍

作为开发人员, 我们通常会直接用root 帐号操作 k8s master node 里的kubectl 命令,并不能感知k8s 多用户权限管理存在。 即使自动化, 我们也会考虑用ansible 来远程操作master node… 所以大部分开发人员默认上是不用深入研究k8s的Access c…

Qt优秀开源项目之二十三:QSimpleUpdater

QSimpleUpdater是开源的自动升级模块,用于检测、下载和安装更新。 github地址:https://github.com/alex-spataru/QSimpleUpdater QSimpleUpdater目前Star不多(911个),但已在很多开源项目看到其身影,比如Not…

[数据结构]算法复杂度详解

文章目录 一、引言1、想象数据结构与算法的奇妙世界2、算法复杂度的轻松解读3、数据结构与算法的温馨寄语 二、轻松掌握复杂度基础1、时间复杂度:算法速度的衡量尺2、空间复杂度:算法占地的衡量尺3、常见的复杂度 三、复杂度的计算1、时间复杂度计算2、空…

联想键盘鼠标套装Liteon SK-8861 银丝带键盘、鼠标对码方法

知识点分析: 最近在IdeaCentre B520e、IdeaCentre A720等机型,标配2.4G无线键鼠套装:Liteon SK-8861。由三部分组成:USB接收器、鼠标、键盘。鼠标、键盘同时和USB接收器连接,未开箱时USB接收器包装在鼠标内。标配的键鼠套装不需要…

linux 内核代码学习(九)--Linux内核启动和文件系统

一个比较顺手的学习平台可以达到事半功倍的效果,这里使用的平台环境主要是利用了主机和从机间的文件共享,以及从机自带的编译环境可以比较顺利的编译busybox1.0版本,方便进行内核和文件系统的测试了学习。 主机环境:vmware7.0win1…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…

Qt 模型视图(三):视图类QAbstractItemView

文章目录 Qt 模型视图(三):视图类QAbstractItemView1.基本概念1.1.使用现有视图1.2.使用模型1.3.使用模型的多个视图1.4.在视图之间共享选择 Qt 模型视图(三):视图类QAbstractItemView ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视…

高级I/O知识分享【5种IO模型 || select || poll】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;前文 2&a…

无人机助力智慧农田除草新模式,基于YOLOv10全系列【n/s/m/b/l/x】参数模型开发构建无人机航拍场景下的农田杂草检测识别系统

科技发展到今天&#xff0c;无人机喷洒药物已经不是一件新鲜事情了&#xff0c;在很多高危的工作领域中&#xff0c;比如高空电力设备除冰&#xff0c;电力设备部件传送更换等等&#xff0c;无人机都可以扮演非常出色的作用&#xff0c;前面回到老家一段时间&#xff0c;最近正…

算法题总结(一)——二分查找专题

二分查找 我们二分查找的本质就是每次能够通过中间值来进行分割&#xff0c;能够比较判断&#xff0c;查找到或者接近需要的数据&#xff0c;然后把一部分的数据丢弃掉。 原题 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &…

LabVIEW提高开发效率技巧----使用快捷键

在LabVIEW的开发过程中&#xff0c;熟练掌握和运用快捷键可以极大地提升工作效率&#xff0c;减少重复性操作所花费的时间。快捷键不仅可以加快编程速度&#xff0c;还能让开发者更加专注于逻辑实现和功能设计。细问问将详细介绍LabVIEW中的常用快捷键&#xff0c;特别是强大的…

101012分页属性

4k页面 P&#xff08;有效位&#xff09;&#xff1a;1有效&#xff0c;0无效 R/W&#xff08;读写位&#xff09;&#xff1a;1可读可写&#xff0c;0可读 U/S&#xff08;权限位&#xff09;&#xff1a;1(User)&#xff0c;0(System) A&#xff08;物理页访问位&#xff…

医学数据分析实训 项目五 聚类分析--蛋白质消费结构分析--车辆驾驶行为指标

文章目录 项目五&#xff1a;聚类分析实践目的实践平台实践内容任务一&#xff1a;蛋白质消费结构分析步骤 任务一&#xff1a;蛋白质消费结构分析数据预处理&#xff08;四&#xff09;模型建立及优化KMeans 任务二 车辆驾驶行为&#xff08;四&#xff09;模型建立及优化 项目…

并发带来的对象一致性问题

多线程操作带来数据不一致情况分析&#xff0c;简单demo。 public class Object_IS {private Student_Object so new Student_Object("张三", 123);public static void main(String[] args) throws InterruptedException {Object_IS os new Object_IS();os.test1(…

论文笔记:交替单模态适应的多模态表征学习

整理了CVPR2024 Multimodal Representation Learning by Alternating Unimodal Adaptation&#xff09;论文的阅读笔记 背景MLA框架实验Q1 与之前的方法相比&#xff0c;MLA能否克服模态懒惰并提高多模态学习性能?Q2 MLA在面临模式缺失的挑战时表现如何?Q3 所有模块是否可以有…

输电线路缺陷检测数据集(绝缘子自爆,破损,闪络,鸟巢,防震锤脱落五种缺陷)

输电线路数据集&#xff08;绝缘子自爆&#xff0c;破损&#xff0c;闪络&#xff0c;鸟巢&#xff0c;防震锤脱落五种缺陷&#xff09;包括&#xff1a; 1.绝缘子自爆 2.绝缘子破损绝、闪络 3.鸟巢 4.防震锤脱落 数据增强后的数量 对应数量&#xff1a;1828&#xff0c;1467&a…

类加载器详细介绍

类加载器我们要聊一个神秘而又重要的角色——Java类加载器。这家伙&#xff0c;就像是个超级英雄&#xff0c;总是在关键时刻挺身而出&#xff0c;为我们的Java程序提供强大的支持。我会尽量用简单易懂的方式来介绍它。 一 、类加载器介绍 1、类加载器是什么&#xff1f; 想象…

高频率快响应信号隔离变送器

隔离变送器相册: 隔离变送器图片----捷晟达科技​​​​ 隔离变送器---深圳捷晟达科技 隔离变送器---捷晟达科技 高频率快响应信号隔离变送器 定义&#xff1a; 高频率是指隔离变送器从输入到输出采样时的时间&#xff0c;该产品响应频率从10KHz~100KHz&#xff0c;产品精度高&…