C语言自定义类型_枚举联合(3)
目录
枚举
什么是枚举类型?
枚举的声明
枚举的定义
枚举的优点
枚举的使用
联合(共用体)
什么是联合呢?
联合类型的定义
联合的特点
联合使用
联合大小的计算
联合的应用
今天接着我们来结束自定义类型。🆗🆗
枚举
在初始C语言中学习常量有:字母常量 #define定义的标识符常量 cosnt修饰的常变量 枚举常量
什么是枚举类型?
枚举顾名思义就是【一一列举】。把可能的取值一一列举。比如我们现实生活中:一周的星期一到星期日是有限的7天,可以一一列举。人的性别有;男,女,保密,也可以一一列举。月份有12个月,也可以一一列举。所以就有了枚举类型。
enum tag
{possible value membermember1,member2,member3
};
- enum 枚举关键字 不能省略
- tag 标签 自定义
- member 枚举的可能取值_枚举常量 后面是逗号,最后没有逗号,
- 分号; 不要忘记
枚举的声明
//枚举类型的声明
enum Sex
{MALE,FEMALE,SECRET
};
enum Color
{RED,GREEN,BLUE
};
- 简单理解,定义一种枚举类型,这种类型有有限的取值
- 枚举类型所定义的枚举的常量是不能被修改的
- 枚举常量默认值是从0开始,依次+1的值
- 枚举常量的默认值是可以在 声明枚举常量 的时候初始化为别的值
#include<stdio.h>
enum Sex
{MALE=4,//okFEMALE=5,//okSECRET=6
};
enum Sex
{MALE=4,//okFEMALE,//ok 5SECRET//6
};
int main()
{MALE=5//err❌return 0;
}
枚举的定义
这样定义变量看似可以,但是不建议这样写。
//枚举类型的声明
#include<stdio.h>
enum Sex
{MALE,FEMALE,SECRET
};
int main()
{enum Sex sex = MALE;//OKenum Sex sex = 2;//err❌//枚举类型 //整型printf("%d\n", sizeof(sex));//4return 0;
}
枚举的优点
我们抛出一个问题为什么要用枚举?我们可以使用 #define 定义常量,为什么非要使用枚举?
enum Sex
{MALE,FEMALE,SECRET
};
//类型#define MALE 3
#define FEMALE 4
#define SECRET 5
//替换
- 增加代码的可读性和可维护性
- 和#define定义的标识符比较枚举有类型检查,更加严谨。
- 防止了命名污染(封装)
- 便于调试
- 使用方便,一次可以定义多个常量
以上都是非常重要的原因,在平时写代码我们很少用到枚举,但是留时间写代码,总会有所感悟的
枚举的使用
enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
联合(共用体)
什么是联合呢?
联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些【成员公用同一块空间】(所以联合也叫共用体)。
union tag
{member - list;
};
- union 联合关键字
- tag标签 自定义
- member-list 成员列表
- 分号; 不要忘记
联合类型的定义
union Un
{char c;int i;
};
联合的特点
下面代码那我们猜测一下大小是5个字节吗?
#include<stdio.h>
union Un
{char c;int i;
};
int main()
{union Un un;printf("%d\n", sizeof(un));//?return 0;
}
既然都这么问了,那肯定不是5个字节的大小。提醒:联合体的成员是公用一块空间。
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
#include<stdio.h>
union Un
{char c;int i;
};
int main()
{union Un un;printf("%d\n", sizeof(un));printf("%p\n", &un.c);printf("%p\n", &un.i);return 0;
}

特点:公用同一块空间。所以改变c的同时会改变i,同一时间只能访问使用一个数据。
联合使用
面试题:判断当前计算机的大小端存储
忘记了大小端的戳一戳:C语言之整数_数据存储篇(1)-CSDN博客
#include<stdio.h>
int check(int i)
{int* p = &i;return *(char*)p;
}
int main()
{int i = 1;int ret=check(i);if (ret == 1){printf("小端存储");}else{printf("大端存储\n");}return 0;
}
用我们的联合也可以轻松搞定!!
#include<stdio.h>
int check(int i)
{union Un//可以用匿名联合{char c;int i;};union Un un;un.i = 1;return un.c;
}
int main()
{int i = 0;int ret=check(i);if (ret == 1){printf("小端存储");}else{printf("大端存储\n");}return 0;
}
联合大小的计算
- 联合的大小至少是最大成员的大小。
- 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
联合体的大小是最大成员的大小对吗?当然是错误的。
#include<stdio.h>
union Un
{char c[5];int i;
};
int main()
{union Un un;printf("%d\n", sizeof(un));return 0;
}

这个和我们上篇博文讲的对齐有关,大家自己算一算。
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
//下面输出的结果是什么?
printf("%d\n", sizeof(union Un1));//8
printf("%d\n", sizeof(union Un2));//16
联合的应用
【后面博客我们会讲通讯录的程序🆗】
✔✔✔✔✔最后,感谢大家的阅读,若有错误和不足,欢迎指正!
下篇博文我们学习动态内存管理。🆗🆗
代码------→【gitee:唐棣棣 (TSQXG) - Gitee.com】
联系------→【邮箱:2784139418@qq.com】
相关文章:
C语言自定义类型_枚举联合(3)
目录 枚举 什么是枚举类型? 枚举的声明 枚举的定义 枚举的优点 枚举的使用 联合(共用体) 什么是联合呢? 联合类型的定义 联合的特点 联合使用 联合大小的计算 联合的应用 今天接着我们来结束自定义类型。Ἑ…...
asp.net网上销售系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio计算机毕业设计
一、源码特点 asp.net 网上销售系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为mysql,使用c#语言开发 aspnet 网上销售系统1 二、功能介绍 前台功能…...
【Windows】RPC调用过程实例详解
概述:windows 创建 RPC调用过程实例详解 参考文章:Remote procedure call (RPC)(远程过程调用 (RPC)) - Win32 apps | Microsoft Learn 文章目录 0x01、生成 UUID 和模版(IDL)文件0x02、添加 acf 文件0x03、编译 idl 文件0x04、客…...
动手学强化学习第2章多臂老虎机
2.1简介 多臂老虎机问题可以被看作简化版的强化学习问题。但是其只有动作和奖励没有状态信息,算是简化版的强化学习问题。 2.2问题介绍 2.2.1问题定义 在多臂老虎机(MAB)问题中,有一个有K根拉杆的老虎机,拉动每一根拉杆都对应一个关于奖励…...
钡铼BL124EC实现EtherCAT转Ethernet/IP的优势
钡铼技术的BL124EC是一款用于将EtherCAT从站转换为Ethernet/IP从站的网关设备。它是钡铼技术开发的高性能、可靠的工业自动化通信解决方案之一。 添加图片注释,不超过 140 字(可选) BL124EC网关可以应用于多种工业自动化场景,以下…...
使用IntelliJ Idea必备的插件!
趁手的工具让开发事半功倍,好用的IDEA插件让效率加倍。 今天给大家分享几个优秀的IDEA插件。 插件安装 首先得知道在IDEA哪安装插件? 点击File---->Settings---->找到Plugins标签,即可搜索想要的插件进行安装了。 现在来看下有哪些值…...
代码随想录算法训练营第23期day19| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
目录 一、(leetcode 654)最大二叉树 二、(leetcode 617)合并二叉树 三、(leetcode 700)二叉搜索树中的搜索 四、(leetcode 98)验证二叉搜索树 一、(leetcode 654&…...
第四章 字符串part02 28. 实现strStr() 459. 重复的子字符串
第四章 字符串part02 28. 实现strStr() 459. 重复的子字符串 一、28. 实现strStr() 题目链接:https://leetcode.cn/problems/repeated-substring-pattern/ 题目介绍: 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。…...
设计模式 - 状态模式
目录 一. 前言 二. 实现 一. 前言 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时&#x…...
【vim 学习系列文章 9 -- .vim 脚本文件开发学习】
文章目录 .vimrc 介绍.vim 脚本文件开发 .vimrc 介绍 在Vim中,你可以将一系列的Vim命令和设置写入一个脚本文件中,并使用:source命令来运行它。这种脚本文件通常被称为vimrc文件,因为它的默认名称是.vimrc。通常,我们将这个文件放…...
NAT模式和桥接模式的区别
NAT模式和桥接模式的区别 NAT模式和桥接模式都是虚拟机网络配置的两种方式,主要区别在于虚拟机与外部网络交互的方式不同。 NAT(Network Address Translation,网络地址转换)模式:在这种模式下,虚拟机和宿主…...
应对出海安全合规挑战,兆珑科技为什么选择了亚马逊云科技?
在中国企业出海进程中,安全合规是企业面临的首要挑战。尤其是当企业业务涉及金融相关领域时,面临着最为严苛的安全合规要求。 深圳兆珑科技有限公司是一家全球化的物联网生态企业,其业务覆盖100多个国家和地区,在欧洲、南美、亚太…...
Allegro基本规则设置指导书之Spacing规则设置
进入规则设置界面 1.设置Line 到其他的之间规则: 2.设置Pins 到其他的之间规则: 3.设置Vias 到其他的之间规则:...
使用【Blob、Base64】两种方式显示【文本、图片、视频】 使用 video 组件播放视频
Blob 显示 Blob 对象的类型是由 MIME 类型(Multipurpose Internet Mail Extensions)来确定的。MIME 类型是一种标准,用于表示文档、图像、音频、视频等多媒体文件的类型。以下是一些常见的 Blob 对象类型: text/plain࿱…...
深度学习_1_基本语法
数据结构 代码: import torchx torch.arange(12)##产生长度为12的一维张量print(x)##X x.resize(3, 4)##被弃用##print(X)y torch.reshape(x, (3, 4))##修改向量为矩阵,一维变二维print(y)print(y.size())xx torch.zeros((2, 3, 4))##三维矩阵&…...
c#设计模式-行为型模式 之 中介者模式
🚀简介 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 从下右图中可以看到,任何一个类的变 动,只会影响的类本身,以及…...
小程序uView2.X框架upload组件上传方法总结+避坑
呈现效果: 1.1单图片上传 1.2多图片上传 前言:相信很多人写小程序会用到uView框架,总体感觉还算OK吧,只能这么说,肯定也会遇到图片视频上传,如果用到这个upload组件相信你,肯定遇到各种各样的问题,这是我个人总结的单图片和多图片上传方法. uView2.X框架:uView 2.0 - 全面兼容…...
人脸检测及追踪回顾
轻量级人脸检测 代码地址 人脸追踪 代码地址 MNN框架部署文档 文档地址...
虚拟环境和包
目录 12. 虚拟环境和包 12.1. 简介 12.2. 创建虚拟环境 12.3. 使用 pip 管理包 12. 虚拟环境和包 12.1. 简介 Python 应用程序经常会使用一些不属于标准库的包和模块。应用程序有时候需要某个特定版本的库,因为它需要一个特定的 bug 已得到修复的库或者它是使用…...
springboot配置文件读取
项目配置文件 怎么说呢,给了个项目,他启动了,然后我看不懂为啥能够启动项目这样 很迷茫,为啥能够成功启动呢项目,为啥项目有properties也要有yml呢? 问题处理 首先,properties的配置的优先级…...
Fish-Speech-1.5零样本语音克隆:10秒音频实现高质量语音合成
Fish-Speech-1.5零样本语音克隆:10秒音频实现高质量语音合成 1. 引言 你有没有想过,只需要10秒钟的录音,就能让AI学会你的声音,然后用你的声音说出任何你想说的话?这听起来像是科幻电影里的情节,但现在真…...
AI建站工具哪家强?看懂这份选型标准与对比指南再做决定
面对市面上五花八门的AI建站工具,很多人陷入选择困难:有的号称全智能生成,有的强调设计感强,有的主打SEO友好。到底哪款适合自己?抛开品牌和营销话术,真正需要看懂的,是工具背后的底层逻辑和核心…...
终极指南:如何使用Skopeo与GitLab CI/CD实现Cloud Run镜像高效部署
终极指南:如何使用Skopeo与GitLab CI/CD实现Cloud Run镜像高效部署 【免费下载链接】skopeo Work with remote images registries - retrieving information, images, signing content 项目地址: https://gitcode.com/GitHub_Trending/sk/skopeo 在现代DevOp…...
终极指南:如何用Scalaz从零构建企业级函数式应用
终极指南:如何用Scalaz从零构建企业级函数式应用 【免费下载链接】scalaz Principled Functional Programming in Scala 项目地址: https://gitcode.com/gh_mirrors/sc/scalaz Scalaz是一个强大的Scala函数式编程库,它提供了丰富的类型类和纯函数…...
如何高效加速GitHub下载:Fast-GitHub插件的完整指南
如何高效加速GitHub下载:Fast-GitHub插件的完整指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否经常因为Git…...
Starry Night Art Gallery实战案例:小红书爆款插画AI生成流程
Starry Night Art Gallery实战案例:小红书爆款插画AI生成流程 1. 引言:当AI艺术遇上小红书爆款 如果你在小红书上刷到过那些点赞过万、充满梦幻色彩的插画作品,可能会好奇:这些画风独特、细节精美的作品,到底是怎么创…...
3MF插件全面指南:打造高效3D打印工作流
3MF插件全面指南:打造高效3D打印工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 3MF插件是Blender中实现3D打印工作流的重要工具,它能帮助用…...
2026届必备的十大降AI率助手推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于内容创作里,将 AI 生成率予以降低的关键之处在于把机器输出的规整性还有重复性…...
抖音直播回放下载工具全解析:技术原理与跨领域应用指南
抖音直播回放下载工具全解析:技术原理与跨领域应用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...
告别理论眩晕!用‘水波共振’和‘弹簧阻尼’比喻秒懂准PR控制传递函数
告别理论眩晕!用‘水波共振’和‘弹簧阻尼’比喻秒懂准PR控制传递函数 想象一下,你正在湖边用不同频率的音叉轻触水面——只有当音叉频率与湖水固有频率完全匹配时,才会激起巨大的涟漪。这种"挑剔"的共振现象,正是理解准…...
