当前位置: 首页 > news >正文

【C语言】联合和枚举

在这里插入图片描述
个人主页点这里~


联合和枚举

  • 一、联合体
    • 1、联合体类型的声明
    • 2、联合体成员的特点
    • 3、与结构体对比
    • 4、计算联合体大小
  • 二、枚举
    • 1、枚举的声明
    • 2、枚举的优点
    • 3、枚举类型的使用

一、联合体

1、联合体类型的声明

联合体的定义与结构体相似,但是联合体往往会节省更多的空间,它的特点是所有成员共用一块内存空间,结构体也叫共用体
联合体中给某一成员赋值,其他成员值往往会跟着变化

#include <stdio.h>
union Un
{char c;int i;
};
int main()
{union Un un = { 0 };printf("%d\n", sizeof(un));return 0;
}

定义联合体我们用的是union,定义格式与结构体相差不多,大括号里边是成员变量
输出结果:
在这里插入图片描述
按照结构体的标准来说,这里应该是8,但为什么会是4呢?
就是因为前边提到的:联合体的成员共用一块内存空间

2、联合体成员的特点

联合变量的大小至少是最大成员变量的大小

#include <stdio.h>
union Un
{char c;int i;
};
int main()
{union Un un = { 0 };un.i = 0x11223344;un.c = 0x55;printf("%x\n", un.i);printf("%p\n", &(un.i));printf("%p\n", &(un.c));printf("%p\n", &un);return 0;
}

在这里插入图片描述
我们发现第一行输出11223344被修改成了11223355
第二行联合体地址,联合体成员地址都是一个地址
所以我们验证了联合体成员变量共用一块内存
在这里插入图片描述

3、与结构体对比

struct Un
{char c;int i;
};
union Un
{char c;int i;
};

在这里插入图片描述
结构体内存中,灰色的是浪费掉的内存

4、计算联合体大小

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

#include <stdio.h>
union Un1
{char c[5];//1int i;//4
};
//当成员中有数组时,用其数组中每个数据的数据类型来比较最大对齐数
//4为最大对齐数,最大数为5,对齐到4的整数倍,即为8
union Un2
{short c[7];//2int i;//4
};
//4为最大对齐数,最大数为14,对齐到4的整数倍,即为16
int main()
{printf("%d\n", sizeof(union Un1));printf("%d\n", sizeof(union Un2));return 0;
}

在这里插入图片描述
我们在采购物品时(图书,杯子,笔记本,衣服),可以写一个结构来录入它们的信息

struct list
{//公共属性int stock_number;//库存量double price; //定价int item_type;//商品类型//特殊属性char title[20];//书名char author[20];//作者int num_pages;//⻚数char design[30];//设计int colors;//颜⾊int sizes;//尺⼨
};

我们用结构可以很快的写出来,但是这样会占用一些不必要的内存,例如图书没必要录入它的颜色,设计等属性,杯子也没有书名和作者,这样,我们的联合就可以发挥它的作用,在一定程度上节省内存

struct gift_list
{int stock_number;//库存量double price; //定价int item_type;//商品类型union {struct{char title[20];//书名char author[20];//作者int num_pages;//⻚数}book;struct{int colors;//颜色int sizes;//尺寸char design[30];//设计}cup;struct{char design[30];//设计int colors;//颜⾊int sizes;//尺⼨}clothes;struct{int num_pages;//页数int sizes;//尺寸}notebook;}item;
};

二、枚举

1、枚举的声明

枚举就是一一列举的意思,枚举用enum来定义,定义方法也是类似结构体与联合体的方式

enum Day//星期
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};

enum Day就是枚举类型,大括号中的内容为枚举类型的可能取值,也叫枚举常量,这些枚举常量都是有值的,默认从0开始,依次递增1,也可以赋初始值

enum Day
{Mon,Tues,Wed,Thur=2,Fri,Sat,Sun
};

从上到下值依次为0 1 2 2 3 4 5
中间赋值,前面从头开始为0,依次递增1,到该枚举常量时,取被赋予的值,然后往下还是依次递增1

enum Day
{Mon=4,Tues,Wed,Thur,Fri,Sat,Sun
};

从上到下值依次为4 5 6 7 8 9 10
依次递增1

2、枚举的优点

我们知道#define也可以完成枚举这样的效果,那为什么我们还要使用枚举呢?
①增强代码的可读与可维护性
②和#define相比枚举有类型检查,更加安全严谨
③便于调试,在预处理阶段,会删除#define定义的符号,直接用所替换的值替换,导致预处理与真实代码不统一,无法更好地调试
④使用方便,一次可以定义多个常量
⑤枚举遵循作用域规则,枚举声明在函数内,只能在函数内使用

3、枚举类型的使用

enum Day
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};
enum Day today = Mon;

使用枚举常量为枚举变量赋值,在C语言中可以用整数来给枚举变量赋值,但在C++中不可以


今日分享就到这里了~

在这里插入图片描述

相关文章:

【C语言】联合和枚举

个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似&#xff0c;但是联合体往往会节省更多的空…...

苹果手机黑屏打不开怎么办?5种方法让你轻松应对

苹果手机以其卓越的性能和流畅的操作体验赢得了全球用户的喜爱。然而&#xff0c;就像其他电子产品一样&#xff0c;苹果手机偶尔也会遇到一些问题。其中&#xff0c;苹果手机黑屏打不开是许多用户都曾遇到过的困扰。当您按下电源键&#xff0c;却发现手机屏幕一片漆黑&#xf…...

鸿蒙:滑动条组件Slider

滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调节、亮度调节等应用场景。 说明 该组件从API Version 7开始支持。 子组件 无 接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direc…...

【智能家居项目】RT-Thread版本——DHT11获取温湿度 | MQTT上传到服务器 | 服务器控制外设

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 这篇文章中&#xff0c;本喵将使用RT-Thread Studio来实现这个智能家居的项目&#xff0c;最终…...

Docker 轻量级可视化工具 Portainer

1. 是什么 它是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便管理Docker环境&#xff0c;也包括单机环境和集群环境。 2. 安装 官网&#xff1a;Kubernetes and Docker Container Management Software 安装路径&#xff1a;Install the Compose plug…...

推特Twitter有直播功能吗?如何用Twitter直播?

现在各大直播平台已经成为社交媒体营销的一种重要渠道&#xff0c;它让品牌能够即时地与全球受众进行互动。据统计&#xff0c;直播市场正在迅速增长&#xff0c;预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中&#xff0c;许多社交媒体平台如YouTube、Facebook、…...

蓝桥杯算法基础(32):素数,埃式筛法,快速幂,斐波那契与矩阵幂运算

素数 有些人认为一个人一生中有三个周期&#xff0c;从他或她出生的那一天开始。 这三个周期是身体周期&#xff0c;情感周期的和智力的周期&#xff0c;他们有周期的长度为23&#xff0c;28&#xff0c; 和33天。每一个周期都有一个高峰。在一个周期的高峰期&#xff0c; 一个…...

VSCode - 离线安装扩展python插件教程

1&#xff0c;下载插件 &#xff08;1&#xff09;首先使用浏览器打开 VSCode 插件市场link &#xff08;2&#xff09;进入插件主页&#xff0c;点击右侧的 Download Extension 链接&#xff0c;将离线安装包下载下来&#xff08;文件后缀为 .vsix&#xff09; 2&#xff0c;…...

2024年中级职称现在报名,时间还太早了吗?什么时候合适?

甘建二十年耕耘职称&#xff0c;关于职称大小事都了解 想要评湖北职称&#xff0c;请认准甘建二&#xff0c;关于职称评审条件、申报时间、评审资料、申报材料、评审流程、证书查询、出证时间、考试答辩等关于职称所有的事情都知道&#xff0c;找甘建二准没错。 我们通常都会觉…...

《责任链模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 模式说明 方案&#xff1a; 责任链模式将请求的发送者和接收者解耦&#xff0c;构成一个链条&#xff0c;并由多个对象对请求进行处理&#xff0c;直到找到合适的处理者为止。优点&#xff1a; …...

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具&#xff0c;但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别&#xff1a; 语言支持 Postman是一个基于Chrome的应用程序&#xff0c;因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…...

【压缩字符串算法解析与实现】

压缩的要求是将连续相同字符替换为字符 数字形式&#xff0c;例如 “AAABCCDDDD” 变为 “A3BC2D4”。 问题描述与分析 给定一个字符串&#xff0c;我们需要判断是否可以进行压缩&#xff0c;并且只在压缩后的字符串长度比原字符串长度更短时进行压缩。如果字符串可以压缩&a…...

test02

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…...

K8S Pod 水平自动扩缩容 HPA

介绍 HPA&#xff08;Horizontal Pod Autoscaler&#xff09;水平扩缩意味着可根据观察到的CPU、内存使用率或自定义度量标准来自动扩展或缩容Pod的数量&#xff08;Deployment、StatefulSet 或其他类似资源&#xff09;。与“垂直”扩缩不同&#xff0c;对于 K8S&#xff0c;…...

Spring日志框架

前言 本文我们简单说说关于Spring中的日志框架,以及对应的注解 我们知道,公司服务器在运行的时候,一定会打印日志,有很多优点,比如预防报警,或者是某重大事故尝试修复等等都需要查看日志 应该说日志对我们来说并不陌生,我们在之前刷题或者是程序遇到bug的时候也经常会将程序的状…...

(九)关系数据理论

函数依赖&#xff1a;设R(U)是属性集U上的关系模式。X、Y是属性集U的子集。若对于R(U)的任意一个可能的关系r&#xff0c;r中不可能存在两个元组在X上的属性值相等&#xff0c;而在Y上的属性值不等&#xff0c;则称X函数确定Y或Y函数依赖于X&#xff0c;记作X→Y。(即只要X 上的…...

【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令

【经验分享】Ubuntu下如何解决问题arm-linux-gcc&#xff1a;未找到命令 前言问题分析解决方法 前言 在编译过程中发现一个问题&#xff0c;明明之前安装了gcc-4.6版本&#xff0c;版本信息都是正常显示的&#xff0c;刚安装上去的时候也是可以用的。但不知道什么原因突然不能…...

【算法刷题day10】Leetcode:232.用栈实现队列、225. 用队列实现栈

文章目录 Leetcode 232.用栈实现队列解题思路代码总结 Leetcode 225. 用队列实现栈解题思路代码总结 stack、queue和deque对比 草稿图网站 java的Deque Leetcode 232.用栈实现队列 题目&#xff1a;232.用栈实现队列 解析&#xff1a;代码随想录解析 解题思路 一个栈负责进&a…...

sql注入详解

ps:简单说下这里只写了我能理解的明白的&#xff0c;后面的二阶注入&#xff0c;堆叠注入没写 手工sql注入 1.存在sql注入本质上就是数据库过滤的不严格或者未进行过滤&#xff0c;1 and 11&#xff0c;返回正常&#xff0c;1 and 12 返回不正常&#xff0c;说明带到数据库里面…...

[蓝桥杯 2022 省 B] 李白打酒加强版

题目链接 [蓝桥杯 2022 省 B] 李白打酒加强版 题目描述 话说大诗人李白&#xff0c;一生好饮。幸好他从不开车。 一天&#xff0c;他提着酒壶&#xff0c;从家里出来&#xff0c;酒壶中有酒 2 2 2 斗。他边走边唱&#xff1a; 无事街上走&#xff0c;提壶去打酒。 逢店加一倍…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…...

视觉slam--框架

视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图&#xff1f; 建图并没有一个固定的形式和算法…...