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

news2024/11/14 3:58:18

共用体

概念

有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量,一个字符型变量和一个实型变量放在同一个地址开始的内存单元中 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){
	}
}

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

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

相关文章

推荐高效的电脑磁盘备份解决方案!

该怎样实现电脑磁盘备份? 接下来,我们将为你介绍两种磁盘备份方法。一种是利用操作系统自带的功能,另一种则是通过第三方工具实现。 方法一. Windows自带的备份还原功能 要在Windows 11/10/8/7中备份软件,你可以使…

Linux shell编程学习笔记10:expr命令 和 算术运算

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算。上节我们研究了 Linux shell编程 中的 字符串运算,今天我们研究 Linux shell编程的算术运算 ,为了方便举例,我们同时对expr命令进行…

物联网AI MicroPython传感器学习 之 Relay继电器模块

学物联网,来万物简单IoT物联网!! 一、产品简介 继电器(英文名称:relay)是一种电控制器件,是当输入量的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。…

linux查看文件内容命令more/less/cat/head/tail/grep

1.浏览全部内容more/less 文件: more:可以查看文件第一屏的内容,同时左下角有一个显示内容占全部文件内容的百分比,空格键会显示下一屏的内容,直到文件末尾 [rootmaster data]# more file1less:相较于mor…

前端工程化(editorconfig+ESLint+Prettier+StyleLint+Husky、Commitlint)

前言 致谢:有来技术大大 通过学习有来技术大大的文章和结合自己的实践,写一篇笔记记录一下 所使用的工具: ide项目风格(editorconfig)代码检查(ESLint)代码风格(Prettier)样式风格(StyleLint)git提交规范(Husky、Commitlint) 一、ide项目…

【算法设计与分析】— —单源最短路径的贪心算法

🎃欢迎大家前去观看我的算法设计与分析专栏: 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助! 🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java…

玉柴集团用USB Server对U盾远程安全管控

在当今数字化时代,企业的业务规模和组织结构日益复杂,对于U盾这样小小的,但却异常重要的USB设备的管理和使用提出了更高的要求。广西玉柴机器股份有限公司作为一家综合性集团企业,其业务规模庞大,组织结构复杂&#xf…

MapReduce(林子雨慕课课程)

文章目录 7. MapReduce7.1 MapReduce简介7.1.1 分布式并行编程7.1.2 MapReduce模型简介 7.2 MapReduce体系结构7.3 MapReduce工作流程概述7.4 Shuffle过程原理7.5 MapReduce应用程序的执行过程7.6 WordCount实例分析7.7 MapReduce的具体应用7.8 MaReduce编程实践 7. MapReduce …

案例研究|DataEase助力无锡布勒业务数据可视化建设

布勒集团是一家来自瑞士的家族企业,在谷物与食品以及先进材料制造等领域深耕超过160年。布勒大中华区的总部位于江苏无锡。无锡布勒是一家集研发、生产、销售于一体的综合性公司,拥有先进的生产设备及高素质的科技研发人员,以谷物深加工、谷物…

代码随想录第41天 | 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III /*** param {number[]} prices* return {number}*/ var maxProfit function (prices) {const len prices.lengthconst dp new Array(len).fill(0).map(x > new Array(5).fill(0));// 第一天买入(第一次买入)dp[0][1] …

c 语言基础题目:PTA L1-033 出生年

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的…

Jetson Orin NX 开发指南(2): 基本环境配置

本文主要是在 Jetson Orin NX 系统烧录和组件安装完成后,对系统进行一些基本的配置,需要注意的是这里的系统其实也是 ubuntu 系统,并且由于选择的是 ,其对应的是 ubuntu 20.04 系统,接下来我将介绍一些基本的配置。 一…

【动态规划】是泰波那契数,不是斐波那契数

Problem: 1137. 第 N 个泰波那契数 文章目录 题目解读解题方法dp动态规划迭代优化✔ 复杂度Code 题目解读 首先我们来解读一下本题的意思🔍 相信读者在看到【泰波那契数】的时候,不禁会联想到【斐波那契数】,它们呢是一对孪生兄弟&#xff0c…

【d2l动手学深度学习】 Lesson 10 多层感知机 + 代码实现 试验结果对比

文章目录 1. 介绍2. 单层Softmax回归2.1 手写Softmax训练效果 2.2 调用pytorch内置的softmax回归层实现调用pytorch内置softmax实验结果总结 3. 一层感知机(MLP) Softmax实验结果 Reference写在最后 1. 介绍 在第十节课 多层感知机 的代码实现部分&…

前后端分离项目-基于springboot+vue的足球青训俱乐部管理后台系统的设计与实现(内含代码+文档+报告)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

4个不限字数的AI智能写作网站,用好任意一个就可以了

我们都在互联网上写过内容,有的人写社交媒体帖子、电子邮件或文本,有的人为我们的网站、产品描述、视频内容、广告甚至客户支持撰写内容。最近,*******推出了友好的类似聊天机器人的界面,使得AI写作更加容易访问,并迅速…

JVM上篇之类加载子系统

目录 类加载子系统 内存结构 类的生命周期 类的加载过程 加载 加载class文件方式 连接 验证 验证阶段 准备 解析 初始化 类加载器 介绍 作用 分类 引导类加载器 自定义类加载器 ClassLoader 获取ClassLoader途径 双亲委派机制 介绍 执行流程 好处 打破…

01-RocketMQ整体理解与快速实战

上一篇:RocketMQ从入门到精通汇总 一、MQ介绍 1、什么是MQ?为什么要用MQ? MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,然后按原来的顺序…

解决 Centos 安装 Python 3.10 的报错: Could not import runpy module

操作环境:CentOS 7、Gcc 4.8.5、Python 3.10.0 系统上已经有 2.x,3.6 版本的 Python 了,但是还是想装一个 3.10 的。因为刚写的脚本文件是较高版本的,在 3.6 上无法正常运行,Python 语法不是很了解,只能从…

[每周一更]-(第66期):Docker 守护进程说明

Docker 的优势 Build once, Run anywhere 上面这句话很精辟的总结了 docker 的优点。我从下面几点具体描述 docker 带给开发者的能力 应用标准化 无论什么语言开发的应用,我们都能用 dockerfile 和构建脚本方便的进行应用构建打包,代码库 构建 regis…