第十一章 共用体union和枚举enum

C语言联合体/共用体/union,枚举使用大全 文章目录一、前言二、联合体1.联合体基础2. 联合体的使用方法和使用场景2.1 多种访问内存途径共存2.2 联合体union和大小端(big-endian、little-endian)2.3 联合体union所占内存空间大小2.4 联合体union适用场合2.5 联合体使用的几个小技巧2.5 本质&进阶三、枚举1.枚举基础知识2.枚举变量的定义3.枚举的使用场景和使用方法3.1 枚举的遍历3.2 将整数转换为枚举 一、前言 构造类型或复杂类型主要有结构体、联合体和枚举。 结构体我们一般使用的比较频繁 阅读详情

共用体

概念

有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量,一个字符型变量和一个实型变量放在同一个地址开始的内存单元中 1000地址。以上3个变量在内存中占的字节数不同,但都从同一地址开始(图中设地址为1000)存放,也就是使用覆益技术,后一个数据覆益了前面的数据。这种使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构。
在这里插入图片描述

定义方式和使用

定义方式和结构体类似

typedef union stu
{
	char a;
	int b;
	float c;
}STU;
int main()
{
	STU test;
	test.b = 97;
	printf("%d\n", sizeof(test));
	printf("%c\n", test.a);
	printf("%d\n", test.b);
	printf("%f\n", test.c);
}

![运行结果](https://img-blog.csdnimg.cn/c5e3bad321d94c1799a417ee760aeafb.png

结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的存单元。
而共用体变量所占的内存长度等于最长的成员的长度。

特点

1、同一内存段可以存放集中不同类型的成员,但每一瞬间只能由一种起作用
2、共用体变量中起作用的成员是最后一次存放的成员。在存入一个新成员后原有的成员的值会被覆盖
3、共用体变量的地址和他的各个成员的地址都是同一地址
4、共用体变量的初始化

union Data
{
	int i;
	char ch;
	float f;
};
int main()
{
	union Data a = { 16 };//对第一个变量赋值
	union Data b = { .ch = 'A' };//对第二个变量赋值
	printf("%d\n", a.i);//16
	printf("%c\n", b.ch);//A
}

5、不能对共用体变量名赋值,同类型的共用体变量可以互相赋值。

枚举

概念

枚举类型就是指把可能的值一 一列举出来,变量的值只限于列举出来的值的范围内。

定义

enum 枚举类型名{
枚举值列表
}

enum Color {
	red,blue,green,black,white
};
int main()
{
	enum Color sky = blue;//真确,blue是定义中的值
	enum Color sky = a;//错误
}

注意:
1、C编译对枚举类型的枚举元素按常量处理,故称枚举常量。不要因为它们是标识
符(有名字)而把它们看作变量,不能对它们赋值。例如:
blue = 1;
2、每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5…。

enum Color {
	red, blue, green, black, white
};
int main()
{
	printf("%d\n", red);//0
	printf("%d\n", blue);//1
	printf("%d\n", green);//2
	printf("%d\n", black);//3
	printf("%d\n", white);//4
}

也可以人为地指定枚举元素的数值,在定义枚举类型时显式地指定,例如;

enum Color {
	red = 4, blue = 4, green = 2, black = 1, white = 7
};
int main()
{
	printf("%d\n", red);//4
	printf("%d\n", blue);//4
	printf("%d\n", green);//2
	printf("%d\n", black);//1
	printf("%d\n", white);//7
}

3、枚举元素可以用来作判断比较。例如;

enum Color {
	red = 4, blue = 4, green = 2, black = 1, white = 7
};
int main()
{
	enum Color sky = blue;
	if (sky == blue) {
		printf("%s", "sky is blue");
	}
	if(sky > red){
	}
}
C语言进阶:一文搞定结构体(struct)、共用体(union)、枚举(enum)和typedef 本文介绍了C语言中的四种复合数据类型:结构体(struct)用于打包不同类型的变量,共用体(union)实现内存共享,枚举(enum)定义常量集合,以及typedef关键字为类型创建别名。通过具体代码示例,展示了如何定义和使用这些类型,重点讲解了结构体的成员访问、共用体的内存共享特性、枚举的常量定义以及typedef简化类型声明的方法。这些复合数据类型是C语言组织复杂数据的重要工具,能够有效提升代码的可读性和管理效率。 阅读详情

相关推荐

Vectorless dynamic动态功耗分析——Voltus

power 计算工具会根据设计信息和用户提供的activity和switching约束来生成虚拟的worst-case的power vector,难点在于哪些instances视为switching,在没有仿真的前提下如何确定开关的时间,使用timing文件(TWF)

qq_44347276的博客 2787

c语言枚举enum共用体union

enum是一个新的关键字,专门用来定义枚举,typeName是枚举类型的名字,value1,value2每个值对应的名字列表。枚举如果没有给值默认是从0依次加1,如果说中间有个枚举没给值那么会在前面一个枚举值+11.枚举列表中的Mon,Tues,Wed这些标识符的作用是全局的,不能定义和他名字相同的变量2.枚举列表中的值是整数3.Mon、Tues都是常量,不能对他们赋值,只能将他们的值赋给其他变量。枚举值定义完基本就跟常量无意 不能修改只能赋值。

小菜鸟的博客 1222

HarmonyOS NEXT 开发者预览版Beta招募应知测试

本次HarmonyOS NEXT 开发者预览版 Beta 招募活动为开发者预览版尝鲜升级,主要供开发者进行应用调测使用,除部分系统应用外,其他所有应用将被清除,因此在进行HarmonyOS NEXT 开发者预览版升级前,需进行数据备份。通过应知测试,并提交了参加HarmonyOS NEXT 开发者预览版招募 Beta 活动的报名信息,就会立刻审核通过并且收到新版本。手机在参加HarmonyOS NEXT 开发者预览版 Beta 招募活动前,需要对应机型升级到招募要求对应的基线版本,并预留内存空间。

长久公子的博客 8648

共用体union与枚举enum(C++)

一、共用体: 共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也就是说,结构可以同时存储int、long和double,共用体只能存储int、long或double。共用体的句法与结构相似,但含义不同。例如: union one4all { int int_val; long long_val; double double_v...

MoooLi的博客 1225

嵌入式电机控制实战:手把手教你实现I/F强拖启动(附仿真代码)

本文详细介绍了嵌入式电机控制中的I/F强拖启动技术,通过参数配置、代码实现和仿真验证的完整流程,帮助开发者掌握永磁同步电机(PMSM)的高效启动方法。文章包含硬件平台搭建、参数整定黄金法则及MATLAB/Simulink仿真验证,适合工业自动化和智能设备领域的工程师参考。

rust6ferris的博客 910

UE5笔记【十二】蓝图函数BluePrint Function

蓝图函数BluePrint Function。蓝图类。蓝图变量。

xiaoyaolangwj的博客 4393

C++:enum枚举&共用体union

知道枚举的使用方法,强类型枚举(Scoped Enumerations)知道共用体union的使用方法。

qq_43441284的博客 736

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

C语言中的enum、struct、union——枚举类型、结构体、共用体

文章目录enum枚举类型struct结构体类型union共用体类型 enum枚举类型 枚举应用:在实际中,有些值无论数值或者字符型的,取值在一个固定范围内,设计者提前知道其取值,但是每个变量只能取其中之一的值,这时可以考虑使用枚举类型。例如:一周有七天;一周有12门课,访问数据类型指定为固定的几个类型。这些都可以使用枚举类型。 枚举定义: enum 枚举类型名{枚举元素1,枚举元素2,枚举元素3...

NewB20143864的博客 2532

RK3568平台开发系列讲解(音频篇)配置声卡

📢本篇文章介绍如何配置声卡。

内核笔记 2448

CDD数据库文件制作(二)——服务配置(0x27)

主要根据诊断调查表,针对0x27服务在CDD中的每一步配置给出详细介绍 1.会话切换配置 1.1.根据诊断调查表进行信息提取 1.2.子功能添加 1.2.1.Level1安全等级1创建 1.2.2.Level3安全等级3创建 1.2.3.安全等级名字查看与修改 1.3.会话切换信息提取(应用程序下) 1.4.会话转换配置(应用程序下) 1.5.会话切换信息提取(引导程序下) 1.6.会话转换配置(引导程序下) 2.安全等级配置信息提取 2.1.安全访问配置(level1) 2.2.安全访问配置(level2

LOVE135149的博客 2928

C语言enum枚举类型、struct结构体类型、union共用体类型用法总结

近日在学习stm32的过程中遇到一些问题,特重新学习了一下C语言关于枚举、结构体、共用体类型的用法,现总结如下>>> 目录·C枚举类型基本定义在stm32中的应用·C结构体类型基本定义初始化作为函数参数在stm32中的应用·C共用体类型基本定义内存空间共用 ·C枚举类型 基本定义 首先,在谈enum的用法之前,要了解const的作用,我们知道const是一种定义常量的数据类型,即被定义的量不可改变数值 ,通常是用作为一些数值冠上一个名字,使得代码可读性更好,比如 const int t.

just_mccc的博客 5097

RNA-seq分析:Step8(富集分析)

RNA-seq富集分析是一种用于分析基因表达数据中特定基因或通路是否富集的分析方法。其基本思想是比较不同基因对应的转录本/基因之间的表达差异及其对应的基因注释信息,通过统计学方法评估差异的显著性,从而确定是否存在某些特定的功能通路或基因集合富集的情况。常用的RNA-seq富集分析工具包括GOseq、KEGG(KEGG enrichment analysis)、DAVID(Database for Annotation, Visualization and Integrated Discovery)等。这

沉香best的博客 3633

【C语言】枚举enum和联合union

本篇博客详细讲解了枚举和联合,附加面试题

Weraphael的博客 1559

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【C数据类型】快速理解:结构体(struct)、枚举(enum)、共用体(union)

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

极客-多重人格递归 9213

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言中的共用体(union)和枚举(enum)

1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5};  //错误 union Data a = {16};  //正确 union Data a = {.ch = ‘j’};  //正确 在什么情况下使用共用体类型的数据?往往在数据处理中,有时需要对同一段空间安排不同的用途,这时用共用体类型比较方便,...

AMY100727的博客 645

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++学习笔记5 - enum枚举、union共用体、inline内联

一、enum枚举 C++继承C的枚举用法 典型枚举类型定义,枚举变量定义和使用。 枚举类型中的枚举值常量不能和其他外部常量名称冲突。 enum day {MON, THU, WEN}; // C和C++98等老版本里的写法 enum day d1; // 定义了一个day类型的变量,变量名是d1 //实际上,C中习惯用typedef来重命名类型以避免每次类型使用都加enum typedef enum {MON, THU, WEN} day; C++11 中扩展的枚举 enum class day

qq_38958704的博客 1396

C语言进阶知识--共用体和枚举

本文讲解 C 语言中联合体与枚举两种自定义类型。联合体与结构体形似,核心是成员共用内存,赋值一个成员会改变其他成员,成员地址相同,大小至少为最大成员大小且需对齐,对比结构体更省空间,可用于判断机器大小端、优化礼品兑换单内存,还详解其大小计算规则。枚举用于列举有限取值,默认值从 0 递增且可自定义,相比 #define,有提升可读性、类型检查、便于调试等优点,可用于表示程序状态、配置选项等,也介绍了其使用方法及注意事项。

HD12345432的博客 925

c语言枚举变量作为函数参数,C语言enum枚举类型、struct结构体类型、union共用体类型用法总结...

近日在学习stm32的过程中遇到一些问题,特重新学习了一下C语言关于枚举、结构体、共用体类型的用法,现总结如下>>>目录·C枚举类型基本定义在stm32中的应用·C结构体类型基本定义初始化作为函数参数在stm32中的应用·C共用体类型基本定义内存空间共用·C枚举类型基本定义首先,在谈enum的用法之前,要了解const的作用,我们知道const是一种定义常量的数据类型,即被定义的...

weixin_39732991的博客 2994

enum枚举/union共用体

enum枚举/union共用体

zrk8008的博客 283

共用体union和枚举enum

1.共用体union 共用体能够存储不同的数据类型,但是同时只能存储其中一种类型。共用体的长度是最大成员的长度。(节省空间) union one4call { int int_val; long long_val; double double_val; };//可以用one4call存储int、long或double,条件是在不同的时间进行: //示例 one4c...

冯Jungle的个人博客 1664

C语言-枚举(enum)奇妙的使用、联合体(共用体union)对空间节省的巧妙

极致详细,彻底掌握枚举、联合体,以实际案例和知识系统性的了解,让你使用时不再疑惑!

. 1858

C 语言枚举类型(enum 关键字)和 C 语言共用体(union 关键字)

目录1.C 语言枚举类型(enum 关键字) 2.C 语言共用体(union 关键字)

m0_74415039的博客 858

联合(union)和枚举(enum)学习(c语言)

带你深入学习联和与枚举!

2302_79964175的博客 2086

C语言---08自定义数据类---02共用体union与枚举enum

C语言中的构造数据类型有:数组类型(自定义大小)、结构体类型、共用体类型、枚举类型。这里主要讲解的是共用体、枚举类。

一位正在苦苦追求毕业的研究僧 474

enum 和 union

目录 enum:基本类型 union:构造类型 enum:基本类型 定义枚举: enum 枚举类型名(不能省略){ 成员1, 成员2, ....... }; typedef enum 枚举类型名(可以省略){ 成员1, 成员2, ....... }新的枚举类型别名; 定义枚举: enum { 成员1, 成员2, ....... }变量名;//定义的同时定义了一个变量,这种用法只能定义一个变量,就是次变量 枚举成员都是一个常量,...

柒哥的博客 917
上一篇: 第十章 结构体
下一篇: 第十一章 文件操作
七号公园的忧伤
七号公园的忧伤 新星创作者: Java技术领域 新星创作者: Java技术领域
博客等级 码龄6年 4857粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值