【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++中不可以


今日分享就到这里了~

在这里插入图片描述

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

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

相关文章

实验报告答案

基本任务&#xff08;必做&#xff09; 先用普通用户&#xff08;自己的姓名拼音&#xff09;登录再操作 编程有代码截图和执行过程结果截图 代写获取&#xff1a; https://laowangall.oss-cn-beijing.aliyuncs.com/studentall.pdf 1. Linux的Shell编程 &#xff08;1&am…

加速科技高性能数模混合信号测试设备ST2500EX精彩亮相SEMICON China 2024

芯片是现代信息技术发展的重要支柱&#xff0c;半导体设备则是芯片产业发展的重要基石。近年来&#xff0c;半导体设备领域开启了国产自研的黄金浪潮&#xff0c;其中&#xff0c;测试机作为芯片测试中至关重要的核心设备之一&#xff0c;国产自研率较低&#xff0c;一直是国内…

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

基于深度学习的植物叶片病毒识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5的植物叶片病毒识别系统&#xff0c;核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及基于Strea…

2024年泰迪杯数据挖掘B题详细思路代码文章教程

目前b题已全部更新包含详细的代码模型和文章&#xff0c;本文也给出了结果展示和使用模型说明。 同时文章最下方包含详细的视频教学获取方式&#xff0c;手把手保姆级&#xff0c;模型高精度&#xff0c;结果有保障&#xff01; 分析&#xff1a; 本题待解决问题 目标&#…

296个地级市GDP相关数据集(2000-2023年)

01、数据简介 GDP&#xff0c;即国内生产总值&#xff08;Gross Domestic Product&#xff09;&#xff0c;是指一个国家或地区所有常住单位在一定时期内生产活动的最终成果。 名义GDP&#xff0c;也称货币GDP&#xff0c;是指以生产物品和劳务的当年销售价格计算的全部最终产…

汉诺塔问题的递归算法解析

文章目录 汉诺塔问题的递归算法解析问题描述递归算法思路代码实现算法复杂度分析总结 汉诺塔问题的递归算法解析 问题描述 汉诺塔问题是一个经典的递归算法问题。问题描述如下&#xff1a; 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘…

日历插件fullcalendar【前端】

日历插件fullcalendar【前端】 前言版权开源推荐日历插件fullcalendar一、下载二、初次使用日历界面示例-添加事件&#xff0c;删除事件 三、汉化四、动态数据五、前后端交互1.环境搭建-前端搭建2.环境搭建-后端搭建3.代码编写-前端代码fullcalendar.htmlfullcalendar.js 4.代码…

【realme x2手机解锁BootLoader(简称BL)】

realme手机解锁常识 https://www.realme.com/cn/support/kw/doc/2031665 realme手机解锁支持型号 https://www.realmebbs.com/post-details/1275426081138028544 realme x2手机解锁实践 参考&#xff1a;https://www.realmebbs.com/post-details/1255473809142591488 1 下载apk…

【yolov5小技巧(1)】---可视化并统计目标检测中的TP、FP、FN

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣相关名词解释二、2️⃣论文中案例三、3️⃣新建相关文件夹四、4️⃣detect.py推理五、5️⃣开始可视化六、6️⃣可视化结果分析 &#x1f440;&#x1f389;&#x1f4dc;系列文章目录 嘻嘻 暂时还没有~~~~ &a…

windows上配置Redis主从加哨兵模式实现缓存高可用

一、哨兵模式 哨兵&#xff08;sentinel&#xff09;是Redis的高可用性(High Availability)的解决方案&#xff1a;由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。当主服务器进入下线状态时&#xff0c;sentinel可以将该主服务器下的某…

R语言中的常用数据结构

目录 R对象的基本类型 R对象的属性 R的数据结构 向量 矩阵 数组 列表 因子 缺失值NA 数据框 R的数据结构总结 R语言可以进行探索性数据分析&#xff0c;统计推断&#xff0c;回归分析&#xff0c;机器学习&#xff0c;数据产品开发 R对象的基本类型 R语言对象有五…

拯救者Legion R9000X 2021(82HN)原装出厂Win10系统镜像ISO下载

lenovo联想拯救者笔记本R9000X 2021款原厂Windows10系统安装包&#xff0c;恢复出厂开箱状态预装OEM系统 链接&#xff1a;https://pan.baidu.com/s/1tx_ghh6k0Y9vXBz-7FEQng?pwd7mih 提取码&#xff1a;7mih 原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标…

法律行业案例法模型出现,OPenAI公布与法律AI公司Harvey合作案例

Harvey与OpenAl合作&#xff0c;为法律专业人士构建了一个定制训练的案例法模型。该模型是具有复杂推理广泛领域知识以及超越单一模型调用能力的任务的AI系统&#xff0c;如起草法律文件、回答复杂诉讼场景问题以及识别数百份合同之间的重大差异。 Harvey公司由具有反垄断和证…

Git的简单入门使用

文章目录 拷贝项目的步骤创建项目的步骤提交项目或项目文件的步骤恢复项目文件的步骤 拷贝项目的步骤 找到需要用来存放项目的文件夹&#xff1b;在文件夹页面空白处右键点击&#xff0c;然后再菜单中选择“Open Git Bash here”。在Github上找到需要进行拷贝的项目&#xff0…

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE&#xff08;Conditional Variational Autoencoder&#xff0c;条件变分自编码器&#xff09;是一种变分自编码器&#xff08;VAE&#xff09;的变体&#xff0c;用于生成有条件的数据。在传统的变分自编码器中&#xff0c;生成的数据是完全由潜在变量决定的&…

Rust---复合数据类型之枚举、数组

目录 枚举的使用Option 枚举数组的使用输出结果 枚举&#xff08;Enum&#xff09;&#xff1a;表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体&#xff08;variants&#xff09;&#xff0c;每个变体可以有不同的数据类型。 枚举的使用 enum Direction {Up,…

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例&#xff08;python scikit-learn&#xff09;—多元线性回归(多角度实验分析) 这次实验&#xff0c;我们主要从以下几个方面介绍&#xff1a; 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验&#xff0c;数据标准化对比实验&#xff0…

Head First Design Patterns -代理模式

什么是代理模式 代理模式为另一个对象提供替身或者占位符&#xff0c;以便控制客户对对象的访问&#xff0c;管理访问的方式有很多种。例如远程代理、虚拟代理、保护代理等。 远程代理&#xff1a;管理客户和远程对象之间的交互。 虚拟代理&#xff1a;控制访问实例化开销大的对…

算法基础--二分

&#x1f600;前言 二分查找是一种常见的算法技巧&#xff0c;通过不断缩小搜索范围&#xff0c;快速找到目标值的算法。在实际应用中&#xff0c;二分查找可以应用于有序数组中的查找、求上界、求下界等问题&#xff0c;具有较高的效率和广泛的应用价值。 &#x1f3e0;个人主…