C语言:自定义类型:联合体和枚举

目录

联合体

联合体是什么?

联合体的大小计算

枚举

枚举是什么?

为什么要使用枚举?


联合体

联合体是什么?

联合体也是个自定义类型,它和结构体类似,都是由多个成员构成,可以有不同的内置类型

但它们是有区别的

联合体之所以叫联合体,是因为它里面的成员会重复使用一块内存空间

所以联合体也叫共用体

union Un
{
 char c;
 int i;
};

union Un是创建的联合体类型

大括号里面的是联合体成员 

最后要加个分号不能忘记

联合体的大小计算


这里的char c 是会和 int i 共用一块空间的,如图

所以我们最终如果打印这个联合体的大小

#include<stdio.h>

union Un
{
	char c;
	int i;
};

int main()
{
	printf("%zd", sizeof(union Un));
	return 0;
}

 

联合体计算方法:

1. 联合体的大小至少是最大成员的大小

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

方法和上一章的结构体计算差不多,但联合体相对较简单

例如:

#include<stdio.h>

union Un
{
	short c[7];
	int i;
};

int main()
{
	printf("%zd", sizeof(union Un));
	return 0;
}

根据上面的计算方法1

short为2个字节,int为4个字节

最大成员为c[7],大小为2*7=14个字节

所以联合体的大小至少是最大成员14个字节的大小

根据上面的计算方法2

要调整到最大对齐数的整数倍,这里不难看出最大对齐数为4

所以答案应该是16个字节

如果不会算最大对齐数可以看看我上一章结构体对齐规则

C语言:自定义类型:结构体-CSDN博客

枚举

枚举是什么?

枚举其实就是全部列举

例如:

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

enum Day是创建的枚举类型

大括号里面是成员,会自动赋值从0开始

最后的分号也不能忘记

所以Mon是0,Tues是1......Sun是6

所以这样明显是不正确的,Mon不是应该是1吗?

所以我们是可以改的

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

这样就会默认从1开始一直往下赋值

这样我们就可以在枚举作用的范围内直接使用它的成员作为值了,跟宏定义类似

为什么要使用枚举?

1. 增加代码的可读性,相比数字来说使用文字能更让人读得懂代码的含义

2. 与#define相比它拥有类型检查,更加严谨

3. 便于调试,若#define会在预处理阶段就删除#define定义的符号

4. 使用方便,可以一次定义多个常量

5. 遵循作用域,枚举若只声明在函数内,则只能在函数内部使用


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java八股面试系列】中间件-Redis

目录 Redis 什么是Redis Redis解决了什么问题 Redis的实现原理 数据结构 String 常用命令 应用场景 List(列表) 常用命令 应用场景 Hash(哈希) 常用命令 应用场景 set(集合) 常见命令​编辑 应用场景 Sorted Set(有序集合) 常见命令​编辑 应用场景 数据持…

【数据结构】线性表的定义与基本操作

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【搭建私人图床】本地PHP搭建简单Imagewheel云图床,在外远程访问

目录 ⛳️推荐 1.前言 2. Imagewheel网站搭建 2.1. Imagewheel下载和安装 2.2. Imagewheel网页测试 2.3.cpolar的安装和注册 3.本地网页发布 3.1.Cpolar临时数据隧道 3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09; 3.3.Cpolar稳定隧道&#xff08;本地设置&…

JavaScript 基础、内置对象、BOM 和 DOM 常用英文单词总结

一提到编程、软件、代码。对于英语不是很熟悉的同学望而却步。其实没有想像中的难么难&#xff0c;反复练习加上自己的思考、总结&#xff0c;会形成肌肉记忆。整理一下&#xff0c;初学者每天30遍。 1、JavaScript 基础语法 break&#xff1a;中断循环或 switch 语句的执行。…

ISAC代码仿真学习笔记

文章目录 A. MIMO Communication ModelB. MIMO Radar Model III. Joint Waveform and Phase Shift Matrix Design for Given Radar BeampatternA. Problem FormulationB. Proposed Algorithm V. S IMULATION RESULTS A. MIMO Communication Model 用户处的接收信号矩阵由 Y …

IO流之字符流实战

IO流&#xff08;一&#xff09;字符流 一、IO流是什么&#xff1f;二、File类三、引入IO流四、代码演示例题&#xff1a;通过java程序完成文件的复制操作从文件中读取数据&#xff08;一个一个读&#xff09;向文件中写入数据&#xff08;一个一个写&#xff09;利用缓冲数组读…

景泓达智能科技邀您参观2024第七届燕窝及天然滋补品博览会

2024第七届世界燕窝及天然滋补品博览会 2024年8月7-9日| 上海新国际博览中心 同期举办&#xff1a;第三届世界滋补产业生态大会暨交流晚宴/颁奖典礼 2024第九届酵素、益生产品博览会 2024上海国际月子健康博览会 2024上海燕博会经历了7年的发展与资源积累&#xff0c;已成为…

初始Redis关联和非关联

基础篇Redis 3.初始Redis 3.1.2.关联和非关联 传统数据库的表与表之间往往存在关联&#xff0c;例如外键&#xff1a; 而非关系型数据库不存在关联关系&#xff0c;要维护关系要么靠代码中的业务逻辑&#xff0c;要么靠数据之间的耦合&#xff1a; {id: 1,name: "张三…

UE5C++学习(四)--- SaveGame类存储和加载数据

上一篇说到使用数据表读取数据&#xff0c;如果我开始玩游戏之后&#xff0c;被怪物打了失去了一部分血量&#xff0c;这个时候我想退出游戏&#xff0c;当我再次进入的时候&#xff0c;希望仍然保持被怪物打之后的血量&#xff0c;而不是重新读取了数据表&#xff0c;这个时候…

锁的7大分类

锁 首先会了解锁的整体概念&#xff0c;了解锁究竟有哪些分类的标准。在后面的文章中会对重要的锁进行详细的介绍。 锁的7大分类 需要首先指出的是&#xff0c;这些多种多样的分类&#xff0c;是评价一个事物的多种标准&#xff0c;比如评价一个城市&#xff0c;标准有人口多…

centos 虚拟机 增加硬盘 虚拟机centos磁盘扩容

2 在centos 7 系统中挂载磁盘 2.1 查看磁盘信息 进入centos 7系统中&#xff0c;输入“# df -h”命令&#xff0c;查看磁盘信息。 这里没有写显示新增的磁盘信息。 2.2 对新加的磁盘进行分区操作 2.2.1 查看磁盘容量和分区 2.2.2 创建分区 a. 选择新增的磁盘&#xff08;这…

Spring Boot + MyBatis

一、配置依赖 <!-- MyBatis --> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.5.3</version> </dependency> <!-- junit测试依赖 --&g…

Unity连接MySQL踩坑,问题处理记录

用的unity2021版本&#xff0c;MySQL是官方下载的最新版8.0.36. 安装MySQL时&#xff0c;过去如果安装过&#xff0c;一定要删干净&#xff0c;单纯的卸载不行&#xff0c;网上有很多教程。 MySQL安装完成后&#xff0c;将安装目录的MySql.Data.dll文件放入unity项目的Plugin…

隐语技术架构

隐语架构 产品定位 算法层 计算层 密码原语 互联互通–资源层 总结

ElasticSearch8 - 基本操作

前言 本文记录 ES 的一些基本操作&#xff0c;就是对官方文档的一些整理&#xff0c;按自己的习惯重新排版&#xff0c;凑合着看。官方的更详细&#xff0c;建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

Saltstack 最大打开文件数问题之奇怪的 8192

哈喽大家好&#xff0c;我是咸鱼。 今天分享一个在压测过程中遇到的问题&#xff0c;当时排查这个问题费了我们好大的劲&#xff0c;所以我觉得有必要写一篇文章来记录一下。 问题出现 周末在进行压测的时候&#xff0c;测试和开发的同事反映压测有问题&#xff0c;请求打到…

Acwing528. 奶酪(并查集)

题目 现有一块大奶酪&#xff0c;它的高度为 h&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。 我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系中&#xff0c;奶酪的下表面为 z0&#xff0c;奶酪的上表面为 zh 。…

成为创作者的第 730 天——创作纪念日

​​ 文章目录 &#x1f4e8; 官方致信&#x1f3af;我的第一篇文章&#x1f9e9; 机缘与成长 &#x1f3af; 成就&#x1f3af; 目标 &#x1f4e8; 官方致信 今天早上打开 CSDN 私信一看&#xff0c;看到了这一条消息&#xff0c;然后看了下日期。突然感慨到&#xff0c;是…

C语言笔记:预处理命令与结构体

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a;ACM金牌带你零基础直达C语言精通https://www.bilibili.com/cheese/play/ep159068?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说…

字符驱动程序-LCD驱动开发

一、驱动程序的框架 总共分为五步&#xff1a; 1、自己设定或者系统分配一个主设备号 2、创建一个file_operations结构体 这个结构体中有操作硬件的函数&#xff0c;比如drv_open、drv_read 3、写一个注册设备驱动函数 需要register_chrdev(major,name,结构体)&#xff0…