结构体,联合体,枚举( 2 )

news2024/11/25 17:21:40

目录

2.联合体

2.1联合体类型的声明

2.2联合体的特点

2.3联合体的内存大小

3.枚举

3.1枚举类型的声明

3.2枚举类型的优点

3.3枚举类型的使用


2.联合体


        联合体(Union)是另一种复合数据类型,它允许我们在同一内存位置存储不同的数据类型,但在任意时刻只能存储其中一个类型的值。联合体的大小由其最大成员决定,这使得它在需要节省内存或者在多个数据类型之间进行切换时非常有用。例如,我们可以使用联合体来存储一个整数或者一个浮点数,根据需要选择存储哪种类型的数据。

2.1联合体类型的声明

        和结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。有意思的是,编译器只会给其中最大的成员来分配足够的空间,这就是联合体最大的特点——所有的成员公用一块内存空间,所以联合体也叫:共用体。

        那么给联合体其中⼀个成员赋值,其他成员的值也跟着变化呢?

仔细想想联合体的成员公用一个内存,那么给它赋值之后好像确实所有的成员值都会发生改变,换一种方式说,联合体调用哪个成员,哪个成员便会使用这块空间,就会输出你所赋的值。

输出结果为:


2.2联合体的特点

        联合体的成员是公用同一块内存空间的,这样一个联合体变量的大小,至少是最大成员的大小(因为联合体至少得有能力保存最大的那个成员)。

这里小编给出两个代码以帮助更好的理解联合体的特点:

代码1:

结果为:

(这里的运行结果每次都会变化,因为计算机会给联合体随机分配空间)

我们仔细分析就可以画出,un的内存布局图。以次来更好的理解

代码2:

结果为:

那么为什么会输出11223355而不是11223344,我们同意来画图分析。

这样是不是就更加理解了联合体的特点呢。


2.3联合体的内存大小

         结构体的内存大小遵循结构体的对齐规则,那联合体的内存大小是不是也应该有对齐规则呢?答案显然是有的。

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。

结果为:


3.枚举


         枚举(Enum)是一种特殊的数据类型,它允许我们定义一个由一组命名的常数组成的集合。枚举在需要定义一组具有明确意义的选项时非常有用,比如一周的七天、一年的四季等。枚举的使用不仅可以提高代码的可读性,还可以避免使用魔术数(Magic Numbers),使得代码更加健壮和易于维护。

3.1枚举类型的声明

        枚举顾名思义就是一一列举,把可能取到的值一一列举。

比如我们生活中的:一周有7天可以一一列举,月份有12个月也可以一一列举,三原色也可以一一列举。

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

        以上的enum Day和enum Color都是枚举类型。


3.2枚举类型的优点

        既然是定义常量,那么define也可以用来定义常量,为什么还要创建一个枚举类型呢?

枚举的优点:

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


3.3枚举类型的使用

        

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

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

相关文章

PyYAML,一个强大的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个强大的 Python 库 - pyyaml。 Github地址:https://github.com/yaml/pyyaml/ 在处理配置文件、序列化数据等场景中,YAML(YAML Ain’t Ma…

雷勒过滤与您相约2024第13届生物发酵展

参展企业介绍 青岛雷勒过滤科技有限公司是一家致力于不锈钢过滤网,涂料筛,滤袋等研发、生产和服务一体的综合型公司。雷勒专业生产各种高品质的不锈钢过滤元件,用于各种关键的过滤与分离环节。 雷勒拥有先进的生产设备,完善的产…

BGP-BGP选路、BGP4+

BGP-BGP选路,BGP4 支持IPv6的BGP,又称为MP-BGP,BGP4 BGP:外部网关协议、使用TCP作为其传输层协议、支持CIDR、增量更新、路径矢量路由协议、无环路、路由策略丰富、可防止路由震荡、易于扩展。 BGP工作原理——报文类型&#x…

信捷 XD/XL plc 单精度/双精度浮点数比较 ECMP,EDCMP

对于单精度浮点数,用ECMP指令。 对于双精度浮点数,用EDCMP指令 注意:EDCMP 指令中寄存器的首地址必须为偶数。

教育信创 | 云轴科技ZStack联合飞腾发布全场景教育信创白皮书

随着数字化时代的到来,教育行业正面临着前所未有的挑战与机遇。为了推动教育行业的数字化转型和信创人才培养,云轴科技ZStack联合飞腾于3月28日正式发布了《教育行业数字化自主创新飞腾生态解决方案白皮书》(简称《教育白皮书》)。…

Day57:WEB攻防-SSRF服务端请求Gopher伪协议无回显利用黑白盒挖掘业务功能点

目录 SSRF-原理&挖掘&利用&修复 SSRF无回显解决办法 SSRF漏洞挖掘 SSRF协议利用 http:// (常用) file:/// (常用) dict:// (常用) sftp:// ldap:// tftp:// gopher:// (…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发:前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/1]

​ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 专栏介绍 YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

Java数据结构-栈

目录 1. 栈的概念2. 栈的实现2.1 顺序栈2.2 链式栈 3. 栈的应用3.1 栈的使用3.2 括号匹配3.3 逆波兰表达式求值3.4 出栈入栈次序匹配3.4 最小栈 1. 栈的概念 栈是一种顺序结构,只允许在一端进行插入和删除,插入删除的一端叫栈顶,另一端叫栈底…

蓝桥杯嵌入式学习笔记(7):ADC程序设计

目录 前言 1. ADC原理 1.1 主要特性 1.2 模拟输出电路图 2. 使用CubeMX进行源工程的配置 2.1 引脚配置 2.2 配置AD1 2.3 配置AD2 2.4 配置时钟 3. 代码编程 3.1 预备工作 3.2 bsp_adc.h文件编写 3.3 bsp_adc.c文件编写 3.4 main.c编写 3.4.1 时钟函数配置 3…

内网渗透学习-漏洞利用

1、漏洞搜索与利用 漏洞1&#xff1a;后台弱口令 漏洞2&#xff1a; 在yxcms有个留言功能&#xff0c;常常存在存储型xss漏洞 先用<h1>123xss</h1>测试一下会不会解析 登录管理员账号审核留言&#xff0c;发现xss脚本解析了 写入xss弹窗 再次返回管理员审核页面&…

Hive on Spark 配置

目录 1 Hive 引擎简介2 Hive on Spark 配置2.1 在 Hive 所在节点部署 Spark2.2 在hive中创建spark配置文件2.3 向 HDFS上传Spark纯净版 jar 包2.4 修改hive-site.xml文件2.5 Hive on Spark测试2.6 报错 1 Hive 引擎简介 Hive引擎包括&#xff1a;MR&#xff08;默认&#xff09…

leaflet知识点:leaflet.draw的使用指南

一&#xff0c;安装插件 npm i leaflet-draw --save 二&#xff0c;引入插件 import "leaflet-draw"; import "leaflet-draw/dist/leaflet.draw.css";三&#xff0c;使用插件 leaflet-draw的插件使用有两种方法。 1. 作为工具栏控件加入到地图种使用 //…

linux离线安装NodeJs

一、官方下载 地址&#xff1a;Node.js — Download Node.js 选择linux系统版本 为了防止安装过程出现一些适配问题&#xff0c;我没有选择下载最新版&#xff0c;实际应该下载你的前端所用的nodejs版本 未完待续。。

深度解析Android APP加固中的必备手段——代码混淆技术

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

3.5网安学习第三阶段第五周回顾(个人学习记录使用)

本周重点 ①SSRF服务器端请求伪造 ②序列化和反序列化 ③Vaudit代码审计 本周主要内容 ①SSRF服务器端请求伪造 一、概述 SSRF: server site request forgery (服务器端请求伪造)。 SSR: 服务端请求&#xff0c;A服务器通过函数向B服务器发送请求。 SSRF发生的前提条件…

idea 报错 Could not list the contents of folder “ftps

idea 报错 Could not list the contents of folder "ftps 解决方案 这里看到了网上的解决方案&#xff0c;顺便再记录一下。打开 【高级】菜单 - 取消勾选 被动模式。然后点击测试连接&#xff0c;显示连接成功&#xff01; ftp中的主动模式和被动模式 主动模式&…

1.JavaEE进阶篇 - 为什么要学习SpringBoot呢?

文章目录 1.为什么要学框架&#xff1f;2.框架的优点展示(SpringBoot VS Servlet)2.1 Servlet 项⽬开发2.1.1 创建项⽬2.1.2 添加引⽤2.1.3 添加业务代码2.1.4 运⾏项⽬(配置tomcat)2.1.5 Maven配置2.1.5.1修改本地Maven仓库地址2.1.5.2 配置settings.xml文件2.1.5.3项目 本地仓…

Nginx开发实战三:替换请求资源中的固定数据

文章目录 1.效果预览2.下载Nginx解压并初始化3.字符串替换模块安装4.修改nginx配置文件并重启 1.效果预览 页面初始效果 页面替换后效果 说明:页面是内网的一个地址&#xff0c;我们通过nginx可以很便捷的将其改为外网访问&#xff0c;但是在外网访问这个地址后&#xff0c…

剑指offer--数组中重复的数字

一.题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 算法1.排序,然后遍历,时间复杂度O(nlogn),空…