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

目录

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.rhkb.cn/news/295873.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows搭建Lychee图片管理系统结合内网穿透实现公网访问本地图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…

Windows系统安装OpenSSH结合VS Code远程ssh连接Ubuntu【内网穿透】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-AwzyR2lkHKjD9HYl {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

linux设置Nacos自启动

前提:已经安装好nacos应用 可参考:Nacos单机版安装-CSDN博客 1. 创建nacos.service 1.1 在 /lib/systemd/system 目录底下,新建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service]Typeforking# 单机启动方式&#…

让手机平板成为AI开发利器:AidLux

想ssh登录自己的手机吗? 想在手机上自由的安装lynx、python、vscode、jupyter甚至飞桨PaddlePaddle、Tensorflow、Pytorch和昇思Mindspore吗? 那么看这里....装上AidLux,以上全都有! AidLux是一个综合的AI开发平台,…

JAVAEE之Spring, Spring Boot 和Spring MVC的关系以及区别

1.Spring, Spring Boot 和Spring MVC的关系以及区别 Spring: 简单来说, Spring 是⼀个开发应⽤框架,什么样的框架呢,有这么⼏个标签:轻量级、⼀ 站式、模块化,其⽬的是⽤于简化企业级应⽤程序开发 Spring的主要功能: 管理对象&am…

LabVIEW电力设备在线监测系统

LabVIEW电力设备在线监测系统 在电力行业中,变电站的稳定运行对于保障电力系统的安全性和可靠性至关重要。开发了一种基于LabVIEW软件开发的变电站电力设备在线监测系统,实时监控变电站内部的电力设备状态,确保电力传输的高效与安全。通过对…

C++的字节对齐

什么是字节对齐 参考什么是字节对齐,为什么要对齐? 现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规…

java学习之路-类和对象

前言 本文内容: 类的定义及其使用 this的引用 对象的构造及初始化 封装 static成员 代码块讲解 内部类 文章目录 1.类定义和使用 1.1了解什么是面向对象 1.2简单认识类 1.3定义类 1.4栗子 2.类的使用-类的实例化 2.1什么是实例化 2.2类和对象的说明 3.this引…

使用python实现i茅台自动预约

使用python实现i茅台自动预约[仅限于学习,不可商用] 运行: 直接运行 imtApi.py 打包:切换到imt脚本目录,执行打包命令: pyinstaller --onefile imtApi.py这个应用程序可以帮助你进行茅台自动化配置。以下是一些使用…

【热门话题】文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 文言一心与ChatGPT-4:一场跨时代智能对话系统的深度比较一、技术背景…

第N6周:使用Word2vec实现文本分类

import torch import torch.nn as nn import torchvision from torchvision import transforms,datasets import os,PIL,pathlib,warnings #忽略警告信息 warnings.filterwarnings("ignore") # win10系统 device torch.device("cuda"if torch.cuda.is_ava…

Golang面试系列3-内存管理

3.1 内存分配机制 Go内存管理本质上是一个经过内部优化的内存池:自动伸缩内存池大小,合理的切割内存块。 分配逻辑:针对不同大小对象有不同的分配逻辑 (0,16B)且不含指针的对象:Tiny分配(0,16B)且含指针的对象:正常…

推荐多样性 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表…

k8s 基础入门

1.namespace k8s中的namespace和docker中namespace是两码事,可以理解为k8s中的namespace是为了多租户,dockers中的namespace是为了网络、资源等隔离 2.deployment kubectl create #新建 kubectl aply #新建 更新 升级: 滚动升级&#x…

pygame--坦克大战(一)

项目搭建 本游戏主要分为两个对象,分别是我方坦克和敌方坦克。用户可以通过控制我方的坦克来摧毁敌方的坦克保护自己的“家”,把所有的敌方坦克消灭完达到胜利。敌方的坦克在初始的时候是默认5个的(这可以自己设置),当然,如果我方坦克被敌方坦克的子弹打中,游戏结束。从…

蓝色wordpress外贸建站模板

蓝色wordpress外贸建站模板 https://www.mymoban.com/wordpress/7.html

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(上)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分,上部将首先简要介绍方法工…

C++——异常机制

目录 一,背景 1.1 C语言处理错误的方式 1.2 C异常概念 二,异常的使用 2.1 异常的简单使用 2.2 异常的匹配原则 2.3 异常抛对象 2.4 异常的重新抛出 2.5 异常安全 三,自定义异常体系 四,异常优缺点 4.1 优点 4.2 缺点 …

声音文件格式有哪几种?常见的声音格式和转换方法分享

随着数字技术的飞速发展,声音文件已经成为了我们日常生活和工作中不可或缺的一部分。无论是音乐、电影、游戏还是各类应用程序,声音文件都扮演着重要的角色。本文将为大家介绍常见的声音文件格式以及如何进行格式转换。 一、常见的声音文件格式 &#x…

shopee虾皮业绩一直没办法提升?不同时期要有不同的运营思路

店铺运营“开荒期”需要根据自身店铺数据调整运营策略,“运营期”就需要更多分析竞品的运营数据,分析接近上架时间段的出单同款/相似款,有效找到影响起量的因素;在出单缓慢,接近瓶颈期时找同行的策略方案,抓…