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. 遵循作用域,枚举若只声明在函数内,则只能在函数内部使用


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

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

相关文章

Angular入门问题小本本

1、console.log打印object对象显示[object object] 解决方案&#xff1a;使用JSON.stringify console.log(JSON.stringify($rootScope.MaintainDeviceInfo));2、 State ‘goDiskManagement’’ is already defined 解决方案&#xff1a;同一个项目中&#xff0c;不能定义相同…

centos7 的redis的安装

文章目录 查看本机redis⾸先安装 scl 源, 再安装 redis 基本配置启动redis停止redis 查看本机redis ⾸先安装 scl 源, 再安装 redis 安装scl源 yum install centos-release-scl-rh安装redis5 yum install rh-redis5-redis安装成功 基本配置 修改etc/redis/redis.conf 文件…

微前端——qiankun

一、微前端 微前端是指存在于浏览器中的微服务&#xff0c;其借鉴了后端微服务的架构理念&#xff0c;将微服务的概念扩展到前端。即将一个大型的前端应用拆分为成多个模块&#xff0c;每个微前端模块可以有不同的团队开发并进行管理&#xff0c;且可以自主选择框架&#xff0…

软件测试要学习的基础知识——黑盒测试

概述 黑盒测试也叫功能测试&#xff0c;通过测试来检测每个功能是否都能正常使用。在测试中&#xff0c;把程序看作是一个不能打开的黑盒子&#xff0c;在完全不考虑程序内部结构和内部特性的情况下&#xff0c;对程序接口进行测试&#xff0c;只检查程序功能是否按照需求规格…

咕炮课堂Java架构师课程

课程介绍 主要针对1到5年及以上工作经验的开发人员&#xff0c;提供互联网行业热门技术的Java架构师专题培训&#xff0c;由业内技术大牛&#xff0c;行业及实战经验丰富的讲师进行技术分享。内容涵盖redis,mongodb,dubbo,zookeeper,kafka 高并发、高可用、分布式、高性能、并…

向上生长

&#xff08;1&#xff09; 我记得2010年&#xff0c;在中国的苹果应用商店里&#xff0c;充斥的App还有很多&#xff1a;日历App、天气App、电池省电App、记事本App…。但这已经过去了2007-2008-2009三年&#xff0c;这些应用仍然很欢。 我有一个朋友算是中国最早一批开发iOS …

Java项目基于Docker打包发布

1.打包应用 mvn clean package -DskipTests 或者 2.新建dockerfile FROM openjdk:8 #设置工作目录 WORKDIR /opt#COPY wms-app-0.0.1-SNAPSHOT.jar /wms-app/app.jar ADD wms-app-0.0.1-SNAPSHOT.jar app.jar #配置容器暴露的端口 写EXPOSE 是为了防止写-P时匹配不上 …

哪些行业需要在线制作电子证书系统?

哪些行业需要在线制作电子证书系统&#xff1f; 1、教育机构&#xff1a;学校和培训机构需要为学生和培训者颁发证书&#xff0c;您的系统可以帮助他们快速生成和管理这些证书。 2、企业及政府部门&#xff1a;用于员工培训、资质认证等&#xff0c;提高内部管理效率。 3、专…

力扣-20 有效的括号详解 Java

目录 1.题目分析 2.基础知识储备 2.1 哈希表 2.2 栈的存取 3. 逻辑概要 4.源码 示例 1.题目分析 为了对比都是从内而外&#xff0c;一个个匹配&#xff0c;全部匹配成功即为有效字符 2.基础知识储备 2.1 哈希表 简单来说&#xff0c;keyvalue存储 &#xff0c;通过key…

面试经典150题【91-100】

文章目录 面试经典150题【91-100】70.爬楼梯198.打家劫舍139.单词拆分322.零钱兑换300.递增最长子序列77.组合46.全排列39.组合总和&#xff08;※&#xff09;22.括号生成79.单词搜索 面试经典150题【91-100】 五道一维dp题五道回溯题。 70.爬楼梯 从递归到动态规划 public …

九州金榜|孩子产生厌学心理应该怎么办?

孩子厌学孩子在成长学习过程中的一个经历&#xff0c;也是家长在对孩子教育中遇到的一大挑战&#xff0c;孩子产生厌心理家长要怎么办呢&#xff1f;很多家长会对此很无奈&#xff0c;下面九州金榜家庭教育给几个方法&#xff0c;帮助家长疏导孩子厌学心理。 来百度APP畅享高清…

vue3 报错 require is not defined

问题 require is not defined 原因 vite 不支持require的用法&#xff0c; webpack是支持的 解决 方法一&#xff1a; 更改vite使用语法 vite官网 方法二 安装转换插件vite-plugin-require-transform 仓库地址 参考 关于Vite不能使用require问题 方法二Vite 踩坑 —— …

Django之Celery篇(一)

一、介绍 Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。 Celery侧重于实时操作,但对调度支持也很好,其每天可以处理数以百万计的任务。特点: 简单:熟悉…

安卓转鸿蒙竟如此丝滑

随着鸿蒙的爆火&#xff0c;大家都想知道鸿蒙能不能搞&#xff1f; 相信大家搞开发的&#xff0c;都多多少少的了解过鸿蒙。近几个月鸿蒙的大动作也不少&#xff0c;如&#xff1a;重庆市近20个垂域应用与鸿蒙原生合作、深圳制定鸿蒙《行动计划》、阿里再次与鸿蒙展开合作&…

【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型

【好书推荐2】AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型 写在最前面AI辅助研发方向一&#xff1a;AI辅助研发的技术进展方向二&#xff1a;行业应用案例方向三&#xff1a;面临的挑战与机遇方向四&#xff1a;未来趋势预测方向五&#xff1a;与法规的…

32.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-网络数据分析原理与依据

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;31.其它消息的实…

隐语技术架构

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

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

redis在docker安装并启动流程

1、启动server docker run -d -p 6379:6379 --name redis01 redis:7.2.4以上命令&#xff0c;每次启动新的Redis容器&#xff0c;数据会丢失。 我们需要挂载数据文件&#xff0c;在宿主机上面&#xff0c;这样就可以持久化数据. 2、挂载数据文件&#xff08;可根据需求选择…

【vue3(七)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ref二、TS接口泛型规范1.创建ts文件&#xff0c;定义接口2.引入规范 三、props的使用四、生命周期&#xff08;生命周期函数&#xff0c;生命周期钩子&…