枚举和联合(共用体)

目录

  • 枚举
    • 枚举类型的定义
    • 枚举的优点
  • 联合(共用体)
    • 联合类型的定义
    • 联合的特点
    • 联合大小的计算

枚举

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

枚举类型的定义

在这里插入图片描述

  1. enum Dayenum Sexenum Color 都是枚举类型
  2. {}中的内容是枚举类型的可能取值,也叫枚举常量
  3. 这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值

例如:

enum Color//颜色
{RED,GREEN,BLUE
};
int main()
{printf("RED = %d\n", RED);printf("GREEN = %d\n", GREEN);printf("BLUE = %d\n", BLUE);return 0;
}

在这里插入图片描述

枚举的优点

  1. 增加代码的可读性和可维护性
  2. #define定义的标识符比枚举有类型检查,更加严谨。
  3. 便于调试
  4. 使用方便,一次可以定义多个常量

联合(共用体)

联合类型的定义

联合也是一种特殊的自定义类型

这种类型定义的变量也包含一系列的成员
特征是:这些成员公用同一块空间(所以联合也叫共用体)

例如:

//联合类型的声明
union Un
{char c;int i;
};
int main()
{printf("%d\n", sizeof(union Un));union Un un = { 0 };printf("%p\n", &un);printf("%p\n", &(un.c));printf("%p\n", &(un.i));return 0;
}

打印结果为:
在这里插入图片描述
联合类型中的成员共用一块地址
在同一时间只能使用一个联合类型中的成员

联合的特点

  1. 联合的成员是共用同一块内存空间的
  2. 一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

在这里插入图片描述

例:判断大小端存储

union Un
{char c;int i;
};
int main()
{union Un u = { 0 };u.i = 1;if (u.c == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

也可使用匿名共用体进行判断

int check_sky()
{union {char c;int i;}un = { .i = 1 };return un.c;
}
int main()
{int ret = check_sky();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

联合大小的计算

  1. 联合的大小至少是最大成员的大小
  2. 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

例如:

union Un
{short c[7];int i;
};
int main()
{printf("%d\n", sizeof(union Un));return 0;
}

打印结果为:16

分析:

  1. 共用体类型中的short c[7];
    需要14个字节(7(元素)*2(short类型))
    c的对齐数为2(short类型),VS默认的对齐数为8,所以c成员的对齐数为2
  2. 共用体类型中的int i;
    i的对齐数为4(int类型),VS默认的对齐数为8,所以i成员的对齐数为4
  3. 共用体中的最大对齐数为4
    共用体中最大成员的大小为14,不是4的倍数,所以共用体的大小为16

对齐数在结构体详解中的结构体的内存对齐规则中有详细解释

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

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

相关文章

曾桂华:车载座舱音频体验探究与思考| 演讲嘉宾公布

智能车载音频 I 分论坛将于3月27日同期举办! 我们正站在一个前所未有的科技革新的交汇点上,重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融,智慧、便捷与未来的探索之旅正式扬帆起航。 在驾驶的旅途中&#xff0…

通过css修改video标签的原生样式

通过css修改video标签的原生样式 描述实现结果 描述 修改video标签的原生样式 实现 在控制台中打开设置,勾选显示用户代理 shadow DOM,就可以审查video标签的内部样式了 箭头处标出来的就是shodow DOM的内容,这些内容正常不可见的&#x…

MySQL 用了哪种默认隔离级别,实现原理是什么?

MySQL 的默认隔离级别是 RR - 可重复读,可以通过命令来查看 MySQL 中的默认隔离级别。 RR - 可重复读是基于多版本并发控制(Multi-Version Concurrency Control,MVCC )实现的。MVCC,在读取数据时通过一种类似快照的方…

视觉三维重建colmap框架的现状与未来

注:该文章首发3D视觉工坊,链接如下3D视觉工坊 前言 众所周知,三维重建的发展已经进入了稳定期,尤其是离线方案的发展几乎处于停滞期,在各大论刊上也很少见到传统sfmmvs亮眼的文章。这也不难理解,传统的多视…

MYSQL 解释器小记

解释器的结果通常通过上述表格展示: 1. select_type 表示查询的类型 simple: 表示简单的选择查询,没有子查询或连接操作 primary:表示主查询,通常是最外层的查询 subquery :表示子查询,在主查询中嵌套的查询 derived: 表示派…

【王道数据结构】【chapter8排序】【P360t2】

试编写一个算法,使之能够在数组L[1……n]中找出第k小的元素(即从小到大排序后处于第k个位置的元素)(可以直接采用排序,但下面的排序的代码只是为了方便核对是不是第k小的元素,k从0开始计算) #in…

出海手游收入一路高歌,营销上如何成功?

出海手游收入一路高歌,营销上如何成功? 以RPG和SLG为代表的中重度游戏一直是国内厂商在海外市场的传统优势品类,因为它们具有较高的投资回报率,是国内厂商在国际市场上取得成功的“吸金”利器。 据伽马数据发布的《2023全球移动游…

SpringCloud搭建微服务之Consul服务配置

1. 概述 前面有介绍过Consul既可以用于服务注册和发现,也可以用于服务配置,本文主要介绍如何使用Consul实现微服务的配置中心,有需要了解如何安装Consul的小伙伴,请查阅SpringCloud搭建微服务之Consul服务注册与发现 &#xff0c…

steam怎么付款

信用卡支付 登录Steam账户,选择需要购买的游戏或其他物品,点击“加入购物车”。在购物车页面点击“去结账”按钮,进入付款页面。在付款页面选择信用卡付款方式,填写信用卡信息,输入验证码,点击确认付款。 …

Servlet 新手村引入-编写一个简单的servlet项目

Servlet 新手村引入-编写一个简单的servlet项目 文章目录 Servlet 新手村引入-编写一个简单的servlet项目一、编写一个 Hello world 项目1.创建项目2.引入依赖3.手动创建一些必要的目录/文件4.编写代码5.打包程序6.部署7.验证程序 二、更方便的处理方案(插件引入&am…

autocrlf和safecrlf

git远程拉取及提交代码,windows和linux平台换行符转换问题,用以下两行命令进行配置: git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平台下的换行符,LF是linux平台下的换行符。…

基于springboot+vue的公交线路查询系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用,如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等,它们通常具有防抖防震、深度防水和高清画质的特点,能够适应颠簸剧烈的环境,甚至可以承受一定程度的摔落,一些运动相…

基于systick实现获取系统运行时间

基于systick实现获取系统运行时间 文章目录 基于systick实现获取系统运行时间systick.c代码结构:代码功能:总结 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

数学建模【聚类模型】

一、聚类模型简介 “物以类聚&#xff0c; 人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff0c;也可以探究不同类之间的相关性和…

springboot233大学生就业需求分析系统

大学生就业需求分析系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

五种查看Spring容器中bean的方法

五种查看Spring容器中bean的方法 在Spring应用程序中&#xff0c;了解和查看容器中的Bean是进行调试和问题排查的关键。Spring提供了多种方法来查看容器中注册的Bean&#xff0c;以便我们深入了解应用程序的内部结构和调试潜在问题。本文将介绍五种常用的查看Spring容器中Bean的…

C++ map用法详细总结40例

文章目录 1. 定义与初始化2. 插入元素3. 查找元素4. 删除元素5. 遍历6. 访问成员函数7. 修改元素8. 注意事项9. 使用 equal_range 查找键值范围10. 使用 emplace 添加元素11. 使用 cbegin 和 cend 获取常量迭代器12. 排序规则自定义13. 使用 multimap 存储重复键14. 判断 map 是…

Python音乐信息管理库之beets使用详解

概要 在数字化时代,音乐管理变得越来越重要,特别是对于音乐爱好者和专业音乐人士而言。Python作为一种功能强大的编程语言,拥有着丰富的音乐处理库,其中Beet就是一款备受推崇的音乐信息管理工具。本文将深入探讨Beet库的功能特性、使用方法以及应用场景,并提供丰富的示例…

WPF真入门教程31--WPF版房屋租售系统

1、教程回顾 到现在为止&#xff0c;“蒸”入门系列教程已完成了30刺由浅入深地讲解&#xff0c;当然不可能讲到了WPF的所有技能点&#xff0c;但读者看到了wpf的内部各种功能及之间的联系&#xff0c;在此基础上&#xff0c;再提供一个完整有效的综合项目&#xff0c;本项目采…