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.mzph.cn/news/770265.shtml

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

相关文章

【OJ】动归练习二

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 91.解码方法1.1 分析1.2 代码 2. 62.不同路径2.1 分析2.2 代码 3. 63.不同路径 II3.1 分析3.2 代码 1. 91.解码方法 1.1 分析 题目所述就是把一串数字反向解码为字母映射出来&#xff0c;有多少种方法。 题目也说&…

nav仿真(2)

开启仿真和建图 打开第一个窗口启动仿真&#xff1a; source devel/setup.bash export TURTLEBOT3_MODELburger roslaunch turtlebot3_gazebo turtlebot3_world.launch # 启动仿真打开第二个窗口&#xff0c;开始建图&#xff1a; source devel/setup.bash export TURTLEBOT3_…

mysql存储引擎、行锁与索引的关系

一、存储引擎概念介绍 MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎 存储引擎是MySQL将数据存储在文件系统中的存储…

隐语技术架构

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

数据结构(五)——树与二叉树的应用

5.5 树与二叉树的应用 5.5.1 哈夫曼树 结点的权&#xff1a;有某种现实含义的数值。 结点的带权路径长度&#xff1a;从树的根到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。 树的带权路径长度&#xff1a;树中所有叶结点的带权路径长度之和…

linux系统------------Mysql数据库介绍、编译安装

目录 一、数据库基本概念 1.1数据(Data) 1.2表 1.3数据库 1.4数据库管理系统(DBMS) 数据库管理系统DBMS原理 1.5数据库系统&#xff08;DBS) 二、数据库发展史 1、第一代数据库 2、第二代数据库 3、第三代数据库 三、关系型数据库 3.1关系型数据库应用 3.2主流的…

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

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

一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧

作为一名互联网技术爱好者&#xff0c;我对数据的探索充满热情。在本文中&#xff0c;我将以豆瓣读书为案例&#xff0c;详细介绍如何利用Python爬虫、Pandas和Excel这三大工具&#xff0c;一键化地实现数据采集和存储。豆瓣读书作为一个备受推崇的图书评价平台&#xff0c;拥有…

亮剑AIGC,紫光云能否胜人一筹?

【全球云观察 &#xff5c; 科技热点关注】 扎实创新每一步&#xff0c; 先人一步快人一步。 2023年全球科技行业最火的莫过于生成式AI&#xff0c;即Artificial Intelligence Generated Content。在迈向生成式AI的道路上&#xff0c;虽然说不上千军万马&#xff0c;但是国内…

Python学习笔记------文件操作

编码 编码就是一种规则集合&#xff0c;记录了内容和二进制间进行相互转换的逻辑。 编码有许多中&#xff0c;我们最常用的是UTF-8编码 计算机只认识0和1&#xff0c;所以需要将内容翻译成0和1才能保存在计算机中。同时也需要编码&#xff0c;将计算机保存的0和1&#xff0c…

2.4 如何运行Python程序

如何运行Python程序&#xff1f; Python是一种解释型的脚本编程语言&#xff0c;这样的编程语言一般支持两种代码运行方式&#xff1a; 1) 交互式编程 在命令行窗口中直接输入代码&#xff0c;按下回车键就可以运行代码&#xff0c;并立即看到输出结果&#xff1b;执行完一行…

ReentrantLock加锁分析

1、ReentrantLock中其实是有一个AQS的子类实例的成员变量sync&#xff1b; 2、实际是调用的Sync中的lock&#xff1b;Sync是AQS的子类&#xff1b;Sync有两个子类&#xff0c;公平与非公平&#xff1b;默认为非公平&#xff1b;如下是非公平加锁分析&#xff1b; public Reentr…

Visual Basic6.0零基础教学(4)—编码基础,数据类型与变量

编码基础,数据类型与变量 文章目录 编码基础,数据类型与变量前言一、VB中的编程基础二、VB的基本字符集和词汇集1、字符集2、词汇集 VB中的数据类型VB中的变量与常量一.变量和常量的命名规则二.变量声明1.用Dim语句显式声明变量三. 常量 运算符和表达式一. 运算符 1. 算术运算符…

获取Book里所有sheet的名字,且带上超链接

应用背景&#xff1a; 当一个excel有很多sheet的时候&#xff0c;来回切换sheet会比较复杂&#xff0c;所以我希望excel的第一页有目录&#xff0c;可以随着sheet的增加&#xff0c;减少&#xff0c;改名而随时可以去更新&#xff0c;还希望有超链接可以直接跳到该sheet。 可以…

06-验证浮点数输入

鉴于shell脚本的限制和本事&#xff0c;浮点数&#xff08;或“实数”&#xff09;的验证过程乍一看似乎让人望而生畏&#xff0c;不过考虑到浮点数只不过是由小数点分隔的两个整数&#xff0c;再配合能够在脚本中引用其他脚本的能力&#xff08;validint&#xff09;&#xff…

【爬取网易财经文章】

引言 在信息爆炸的时代&#xff0c;获取实时的财经资讯对于投资者和金融从业者来说至关重要。然而&#xff0c;手动浏览网页收集财经文章耗时费力&#xff0c;为了解决这一问题&#xff0c;本文将介绍如何使用Python编写一个爬虫程序来自动爬取网易财经下关于财经的文章 1. 爬…

前端基础 Vue -组件化基础

1.全局组件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&…

【QA】MySQL导出某数据库的所有数据为sql文件,包含建库命令、建表命令。

文章目录 前言Windows系统下 | mysqldump导出数据库数据Docker中导入初始化数据【补充】通过命令行&#xff0c;执行sql文件&#xff0c;将数据导入到数据库在MySQL外面执行在MySQL中执行 前言 我们在用docker部署mysql项目的时候&#xff0c;往往需要对数据库进行数据初始化。…

Java-SSM电影在线播放系统

Java-SSM电影在线播放系统 1.服务承诺&#xff1a; 包安装运行&#xff0c;如有需要欢迎联系&#xff08;VX:yuanchengruanjian&#xff09;。 2.项目所用框架: 前端:JSP、layui等 后端:SSM,即Spring、SpringMvc、Mybatis等。 3.项目功能点: 3-1.后端功能: - 所有后台管理展…

rk3588内核添加特殊分辨率

rk平台内核本身默认支持一些常规的分辨率,如1920x1080@30,1280x720@60,但是往往不能满足需求,如有的客户需要你添加1020x700@35的分辨率,这时候就要自己加上去了。 下图是LCD各个参数对应的位置: 显示mode 各个参数含义如下: hdisplay:有效显示区水平像素数量,对应A…