【C语言进阶篇】自定义类型:联合体和枚举

news2024/9/25 9:35:26

【C语言进阶篇】自定义结构体类型:联合体和枚举

🌈个人主页:开敲

🔥所属专栏:C语言

🌼文章目录🌼

1. 联合体

    1.1 联合体类型的声明

    1.2 联合体的特点

    1.3 联合体大小的计算

2. 枚举

    2.1 枚举类型的声明

    2.2 枚举类型的优点

    2.3 枚举类型的使用

1. 联合体
    1.1 联合体类型的声明

  与结构体类似,联合体也是由一个或者多个成员构成的,这些成员可以是不同的类型。唯一不同的是:编译器只为最大的成员开辟空间,联合体中剩余的成员共用这一块空间。因此,联合体也称为:共用体。

这里的大小为4,因为联合体内成员最大的就是 int 型,而剩余的 char c成员共用这块空间。

    1.2 联合体与结构体对比

  

                                                                   内存分配如下图:

    1.3 联合体大小的计算

①  联合体的大小至少是最大成员的大小。

②  当最大成员的大小不是最大对齐数的整数倍时,就要内存对齐到最大对齐数的整数倍。

    1.4 联合体的巧妙用法

  在之前的文章中,我们判断一个机器是大小端的方法是:创建一个整型变量赋值为1,用一个char* 的指针指向这个变量的第一个字节的地址,判断是 0 还是 1 从而判断是大端存储还是小端存储

  而在我们学习了联合体之后,就可以用一个非常巧妙的方法来判断机器的大小端:

  这里的 c 是跟 i 存放在同一个空间的,而 char 类型只占一个字节,因此,c 保存在了  i 内存的第一个字节处,相当于 c 指向了 i 的第一个字节地址,因此,可以通过判断 c 的值来判断机器的大小端模式。 

2. 枚举

  枚举——顾名思义,就是一一列举,把可能的取值一一列举,和穷举不同的是,穷举就算有再多,只要能列举完就会列举,而枚举并不会列举太多。

  生活中有许多枚举的例子,比如:

  一周的星期一到星期日可以一一列举;

  一年有十二个月份可以一一列举;

  ......

  当我们想要表示这些数据的时候,就可以使用枚举。

    2.1 枚举类型的声明

    

上面定义的 enum Dayenum Month 都是枚举类型,{}中的内容是枚举类型的可能取值,也叫枚举常量,这些常量都是默认有值的,从上至下从0依次递增:

enum Day//星期
{
	Mon,//0
	Tues,//1
	Wed,//2
	Thur,//3
	Fir,//4
	Sat,//5
	Sun//6
};


enum Month//月份
{
	Janu,//0
	Febr,//1
	Mar,//2
	Apr,//3
	May,//4
	June,//5
	July,//6
	Aug,//7
	Sep,//8
	Oct,//8
	Nove,//10
	Dec//11
};

  当然我们也可以在创建的时候赋初始值(这里需要注意的是,在C语言中可以对枚举常量赋值。但在C++中没法进行赋值操作,C++的类型检查更加严格,类型不相同无法进行赋值操作),当赋了初始值以后,剩余成员的默认值也会随之改变,比如:

    2.2 枚举类型的优点

    在我们之前的学习中,我们学习到了#define 来定义常量,既然#define 可以用来定义常量,为什么还要使用枚举呢?下面就是一些枚举的优点:

①  增加代码的可读性和可维护性

②  #define定义的常量没有类型,而枚举中的常量带有类型,因此在使用枚举时更加严谨

③  便于调试观察,#define定义的常量,在使用时会删除#define定义的符号,譬如:

 

④  使用方便,一次可定义多个常量:

⑤  枚举常量是遵守作用域规则的。,在函数内部声明的枚举只能在函数内部使用。

    2.3 枚举类型的使用  

                                                        创作不易,点个赞呗,谢谢啦~

         

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

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

相关文章

2.5、栅格布局(GridRow/GridCol)

概述 栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。主要优势包括: 提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数,可以方便地对页面元素进行定位和排版。 统一的定…

设计模式 模板方法模式

01.如果接到一个任务,要求设计不同型号的悍马车 02.设计一个悍马车的抽象类(模具,车模) public abstract class HummerModel {/** 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动…

AI训练,为什么需要GPU?

随着人工智能热潮,GPU成为了AI大模型训练平台的基石,决定了算力能力。为什么GPU能力压CPU,成为炙手可热的主角呢?首先我们要先了解一下GPU的分类。提到分类,就得提及到芯片。 半导体芯片分为数字芯片和模拟芯片。其中&…

浅谈亚信安慧AntDB-M条件下推

概述 “下推”是数据库管理系统优化查询性能的一种思路,集中式数据库支持谓词下推和投影下推,通过将Filter(过滤)和Project(映射)算子在算子数中向下移动,提前对行/列进行裁剪,减少…

从嵌套事务的日志看MyBatis的sqlSession生命周期

service层业务代码 Override public void test(){QueryWrapper<StoreRebateCalculateLog> queryWrapper;queryWrapper new QueryWrapper<>();queryWrapper.eq("delete_flag", 0);//执行查询A,以非事务方式执行List<StoreRebateCalculateLog> sto…

代码学习第24天----回溯算法

随想录日记part24 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.10 主要内容&#xff1a;回溯算法在代码学习中尤其重要&#xff0c;所以今天继续加深对其的理解&#xff1a;1&#xff1a;递增子序列 &#xff1b;2.全排列 &#xff1b;3.全排列II 491.递…

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口&#xff1b; window系统运行输入cmd打开的指令窗口&#xff1b; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

近期TRO案件盘点,外观专利又双叒叕成维权高发地

近期&#xff0c;多个权利人进行外观专利维权&#xff0c;众多国内卖家被告&#xff0c;建议卖家自查。 案例一&#xff1a;尿布收纳袋——商标外观专利版权 案例关于这款尿布收纳袋&#xff0c;涉及商标、外观专利和版权。 &#xff08;图源网络&#xff0c;侵删&#xff09…

HarmonyOS NEXT应用开发之跨文件样式复用和组件复用

介绍 本示例主要介绍了跨文件样式复用和组件复用的场景。在应用开发中&#xff0c;我们通常需要使用相同功能和样式的ArkUI组件&#xff0c;例如购物页面中会使用相同样式的Button按钮、Text显示文字&#xff0c;我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

软件测评中心分享:软件鉴定测试与验收测试有什么联系和区别?

1、软件鉴定测试   软件鉴定测试是在软件开发完成后进行的一个核心环节&#xff0c;是通过对软件进行功能性、性能、安全性等方面的综合测试&#xff0c;来验证软件是否符合规定的需求和标准。 2、软件验收测试   软件验收测试是软件开发工作结束后的最后一个环节&#xf…

深入理解 CSS:基础概念、注释、选择器及优先级

在构建网页的过程中&#xff0c;我们不仅需要HTML来搭建骨架&#xff0c;还需要CSS来装扮我们的网页。那么&#xff0c;什么是CSS呢&#xff1f;本文将带大家了解css的基础概念&#xff0c;注释、选择器及优先级。 一、CSS简介 1.1 什么是CSS CSS&#xff0c;全称为Cascadin…

IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析

基于LoRa蓝牙的室内场景定位技术&#xff0c;蓝牙主要负责位置服务&#xff0c;LoRa主要负责数据传输。 01 LoRa和蓝牙技术 LoRa全称 “Long Rang”&#xff0c;是一种成熟的基于扩频技术的低功耗、超长距离的LPWAN无线通信技术。LoRa主要采用的是窄带扩频技术&#xff0c;抗干…

VS2019 C++ NetCDF配置

原链接1 原链接2 做个备份 1.下载对应的NetCDF-C和C库 官网下载 选择64位的NetCDF4安装版&#xff08;没有DAP的&#xff09; 现在官网已经没有NetCDF-C 4.7.3 版本了&#xff0c;网上别人提供了新的下载地址&#xff1a;NetCDF各个版本&#xff08;Index of /library/net…

力扣题单(小白友好)

力扣题单 算法小白自用题单,目前对于一些简单的数据结构感觉掌握的还可以,但是力扣很多题还是需要看题解,不够熟练;故整理了一份题单,用于巩固练习; 网上确实有很多对于算法分类讲解的网站,but:有一丢丢选择困难症,每天不知道该刷什么题,再加上网站对于一类题一般就有十几道题目…

Emotion Prompt-LLM能够理解并能通过情感刺激得以增强

Large Language Models Understand and Can be Enhanced by Emotional Stimuli 情感智能对我们的日常行为和互动产生了显著的影响。尽管大型语言模型&#xff08;LLMs&#xff09;被视为向人工通用智能迈进的一大步&#xff0c;在许多任务中表现出色&#xff0c;但目前尚不清楚…

政务服务中心怎么用AI交互数字人打造政务服务新名片?

西海岸新区政务服务中心推出AI交互数字人“灵灵”&#xff0c;以一体机终端形式提供便捷、智能的服务体验&#xff0c;并担任政务数字人主播宣传政策信息。 *图片源于网络 并且AI交互数字人灵灵还承担了政务数字人主播的工作&#xff0c;以数字人短视频的形式&#xff0c;向市…

xercesc库中文保存XML功能实现

目录 一 参考链接 二 运行结果 三 代码 一 参考链接 DOM Programming Guide (apache.org) Xerces-c DOM XML文件的构造_xerces-c domimplementation-CSDN博客 Xerces-c库的使用-CSDN博客 二 运行结果 三 代码 #include "XercesC_Test.h"#if 1//参考链接&…

SpringBoot3使用响应Result类返回的响应状态码为406

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] 解决方法&#xff1a;Result类上加上Data注解

软考系统分析师2024上半年报名流程及注意事项

2024年5月软考系统分析师报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消息的考友…