位置: IT常识 - 正文

C语言进阶——自定义类型:枚举、联合(c语音进阶)

编辑:rootadmin
C语言进阶——自定义类型:枚举、联合

推荐整理分享C语言进阶——自定义类型:枚举、联合(c语音进阶),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c语言进阶书籍,c语言进阶书籍,c语言进阶教程,c语言进阶学什么,c语言如何进阶 知乎,c语言进阶教程,c语言 进阶,c语言进阶书籍,内容如对您有帮助,希望把文章链接给更多的朋友!

🌇个人主页:_麦麦_

📚今日名言:如果不去遍历世界,我们就不知道什么是我们精神和情感的寄托,但我们一旦遍历了世界,却发现我们再也无法回到那美好的地方去了。当我们开始寻求,我们就已经失去,而我们不开始寻求,我们根本无法知道自己身边的一切是如此可贵。——《小王子》

目录

一、前言

 二、正文

1.枚举

1.1枚举的定义 

 1.2枚举的优点

3.3枚举的使用

2.联合体(共用体)

2.1联合类型的定义

2.2联合的特点

 2.3联合大小的计算

 三、结语


一、前言

        在前几篇文章中我们已经了解了结构体并用结构体来实现了通讯录,但其实C语言中的自定义类型还有两大成员:枚举和联合。在接下来的篇幅中我们就将对这两位成员进行详细地讲解!

 二、正文1.枚举

        枚举,顾名思义就是一一列举,把可能的取值一一列举。比如我们显示生活中:一周的星期一到星期日是有限的7天,可以一一列举。性别也可以一一列举成:男、女。

1.1枚举的定义 

         枚举是一种自定义类型,有了类型我们就可以创建变量,那么具体要怎么使用呢,见如下代码:

enum Day//星期{Mon,Tues,Wed,Thur,Fri,Sat,Sun};enum Sex//性别{MALE,FEMALE,SECREAT};enum Color//颜色{Red,Green,Blue};

         以上定义的“enum Day”,“enum Sex”,“enum Color”都是枚举类型。{}中的内容是枚举类型的可能取值,也叫枚举常量。这些可能取值都是有值的,默认从0开始,一次递增1,当然也可以赋初值。

#include <stdio.h>enum Color//颜色{Red=5,Green=2,Blue=0};enum Sex//性别{MALE,FEMALE,SECREAT};int main(){printf("MALE=%d\n", MALE);printf("FEMALE=%d\n", FEMALE);printf("SECREAT=%d\n", SECREAT);printf("小伙伴们%d", Red);printf("%d", Green);printf("%d", Blue); return 0;}

注:一旦当我们初始化之后,就不可以再修改默认值了哦。 

enum Color//颜色{Red=5, //初始化为5Green=2, //初始化为2Blue=0 //初始化为0};int main(){ Red=2; //初始化之后是不可以再改变默认值的 return 0;} 1.2枚举的优点

        有的小伙伴可能会问:既然枚举中的内容是枚举常量,那么我们也可以使用“#define”来定义常量,为什么非要使用枚举呢?

枚举的优点:

1.增加代码的可读性和可维护性

C语言进阶——自定义类型:枚举、联合(c语音进阶)

2.防止了命名污染(封装)

3.和#define定义的标识符有类型检查,更加严谨

4.便于调试

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

        下面我们以通讯录为例来讲讲枚举为什么可以增加代码的可读性。在看过上一篇通讯录的文章后,有的小伙伴下来在敲写case代码的时候,可能看到数字一时无法想起这个数字到底代表的是什么功能,那么我们就使用枚举来对通讯录进行一次小小的优化。

enum fac{Exit,Add,Del,Search,Modify,Show,Sort};int main(){contactContact;//创建通讯录contact tmp;Init_Contact(&Contact);//初始化通讯录Init_Contact(&tmp);int input = 0;do{menu();//打印菜单printf("请选择你所需的功能:");scanf("%d", &input);switch (input){case Add:AddContect(&Contact);break;case Del:DelContect(&Contact);break;case Search:SearchContect(&Contact);break;case Modify:ModifyContect(&Contact);break;case Show:ShowContect(&Contact);break;case Sort:sortContect(&Contact,&tmp);break;case 0:printf("退出通讯录\n");break;default:printf("输入错误,请重新输入\n");}}while (input);return 0;}3.3枚举的使用enum Color //颜色{ RED=1, GREEN=2, BLUE=4};enum Color clr=GREEN;

 注:既然枚举是一种类型,就可以重定义

typedef enum Color //颜色{ RED=1, GREEN=2, BLUE=4}Color;2.联合体(共用体)2.1联合类型的定义

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

        这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体),但是不能同时使用这块空间。可能小伙伴们听得还是有些云里雾里,代码如下:

//联合体的定义#include <stdio.h>union UN{char c;int i;};int main(){union UN un; //猜猜结果如何?printf("%d\n", sizeof(un));printf("%p\n", &un);printf("%p\n", &(un.c));printf("%p\n", &(un.i)); return 0;}

        我们可以看出联合体的大小并不是我们想象的至少是5,而是4。并且两个成员的起始地址都是相同的,也可以间接说明它们是共用同一片空间的。 

2.2联合的特点

        联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少有能力保存最大的那个成员)。依旧以上面代码画图演示。

        我们可以发现 成员’c‘和成员’i‘在第一个字节的空间是共用的,不过这一块空间并不是同时使用的,当成员’c‘使用的时候就会将这块空间修改成自己的内容,成员’i‘也是如此。

 2.3联合大小的计算

        联合的大小至少是最大成员的大小

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

//联合的大小#include <stdio.h>union UN{char c[5];//对齐数1int n;//对齐数4};int main(){union UN un;printf("%d\n", sizeof(un)); return 0;}

 三、结语

          到此为止,关于C语言自定义类型点的学习就告一段落了。

          关注我 _麦麦_分享更多干货:_麦麦_的博客_CSDN博客-领域博主          大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下期见!

本文链接地址:https://www.jiuchutong.com/zhishi/300292.html 转载请保留说明!

上一篇:图像的傅里叶变换(图像的傅里叶变换和离散余弦变换实验报告)

下一篇:基于小程序制作一个ChatGPT聊天机器人(小程序设计制作)

  • 京东618战后复盘,一场教科书式的营销案例(京东618备战方案)

    京东618战后复盘,一场教科书式的营销案例(京东618备战方案)

  • 闲鱼的私信功能在哪里(闲鱼网如何私信)

    闲鱼的私信功能在哪里(闲鱼网如何私信)

  • 抖音企业号昵称必须要用企业名吗(抖音企业号昵称修改审核要多久)

    抖音企业号昵称必须要用企业名吗(抖音企业号昵称修改审核要多久)

  • 手机防窥膜原理是什么(手机防窥膜原理偏振)

    手机防窥膜原理是什么(手机防窥膜原理偏振)

  • ipad卡在白苹果界面(ipad卡在白苹果怎么办)

    ipad卡在白苹果界面(ipad卡在白苹果怎么办)

  • web页面采用什么语言书写(web页面什么样)

    web页面采用什么语言书写(web页面什么样)

  • 华为手机快充怎么开启(华为手机快充怎么设置)

    华为手机快充怎么开启(华为手机快充怎么设置)

  • 美团众包注册不符合规定什么意思(美团众包注册不了怎么回事身份不合要求)

    美团众包注册不符合规定什么意思(美团众包注册不了怎么回事身份不合要求)

  • 帮朋友解封微信为什么不符合要求(帮朋友解封微信朋友圈有风险吗)

    帮朋友解封微信为什么不符合要求(帮朋友解封微信朋友圈有风险吗)

  • 天猫商城代理商扣款怎么回事(天猫代理怎么做)

    天猫商城代理商扣款怎么回事(天猫代理怎么做)

  • 手机号被恶意举报停机怎么办(手机号被恶意举报)

    手机号被恶意举报停机怎么办(手机号被恶意举报)

  • 华为y9s是什么手机(华为y9s手机好不好)

    华为y9s是什么手机(华为y9s手机好不好)

  • 手机一直是3g没有网络(手机一直是3g没有网络怎么回事)

    手机一直是3g没有网络(手机一直是3g没有网络怎么回事)

  • 开发app需要什么技术(开发APP需要什么资源)

    开发app需要什么技术(开发APP需要什么资源)

  • 手机qq空间怎么装扮(手机qq空间怎么看留言板)

    手机qq空间怎么装扮(手机qq空间怎么看留言板)

  • lcd屏黑暗模式省电吗(lcd屏幕调成黑色会省电吗)

    lcd屏黑暗模式省电吗(lcd屏幕调成黑色会省电吗)

  • wps怎么以文件格式发送(wps怎么以文件格式分享给朋友)

    wps怎么以文件格式发送(wps怎么以文件格式分享给朋友)

  • 视频下载到手机上在哪里找(电影视频下载到手机)

    视频下载到手机上在哪里找(电影视频下载到手机)

  • 钉钉打卡迟到能补救吗(钉钉打卡迟到能极速打卡吗)

    钉钉打卡迟到能补救吗(钉钉打卡迟到能极速打卡吗)

  • 爱奇艺蓝屏了怎么办(爱奇艺打开电脑就蓝屏)

    爱奇艺蓝屏了怎么办(爱奇艺打开电脑就蓝屏)

  • pcdm10是什么型号(型号pcdm10是什么意思)

    pcdm10是什么型号(型号pcdm10是什么意思)

  • 荣耀20耳机孔在哪(荣耀20lite耳机孔)

    荣耀20耳机孔在哪(荣耀20lite耳机孔)

  • 云端备份在手机里哪里看(云端备份在手机哪里找)

    云端备份在手机里哪里看(云端备份在手机哪里找)

  • 腾讯手游助手如何设置按键?(腾讯手游助手如何退出登录)

    腾讯手游助手如何设置按键?(腾讯手游助手如何退出登录)

  • 销售货物增值税怎么算
  • 职工薪酬纳税调减的情况
  • 项目差旅费能计入项目费用吗
  • 工程附加税怎么计算
  • 增值税主表本期缴纳上期应纳税额需要填数嘛
  • 税控服务费抵税
  • 结构性存款质押 叫停
  • 未开收入下月开票怎样做分录
  • 退税降低
  • 进口内销是什么意思
  • 收到供应商违约金 发票
  • 进出口贸易中押金怎么算
  • 民事诉讼的适用范围具体包括哪些案件
  • 金税盘抄税报税流程
  • 在下列哪种情况下
  • 财务审核火车票真伪辨别
  • 事业单位转账支票管理
  • 个体户怎么给供货公司
  • 企业信息公示社保信息怎么填,公司没有交
  • 签证费会计分录
  • linux怎么查找
  • PHP:mb_encoding_aliases()的用法_mbstring函数
  • windows11播放视频不清晰
  • linux统计文件行数字数
  • php中

  • 开启资源管理器自动刷新功能
  • 增值税专用发票的税率是多少啊
  • nvidia显卡驱动怎么安装
  • 金融服务企业按照是否办理存款业务
  • 制造业利润占比多少合适
  • php 抓取别的网站的内容
  • php微信公众号开源框架
  • 【Pytorch深度学习实战】(11)变分自动编码器(VAE)
  • 长期股权投资的核算方法
  • cpu power management设置
  • 生产型企业出口退税会计分录
  • 银行账号未备案怎么解决
  • 数量金额式账页图片
  • 计提坏账准备方法变更属于会计估计变更吗
  • 外资企业国内审批手续繁琐
  • 有哪些业务可以和公交公司合作的
  • 个体户开出的增值税发票丢失了怎么办?
  • 限定性净资产是资产类科目吗
  • 商贸公司成本大吗
  • 固定资产清理账户借方
  • 固定资产累计折旧计算公式
  • 预收账款指的是什么意思
  • 应收账款资金占用费怎么算
  • 两处以上取得工资如何申报个税
  • 补报印花税税需要提供什么材料
  • 报销运输费用
  • 对外投资未实缴怎么办
  • 财产租赁合同印花税计税依据
  • 差旅津贴和差旅补贴需要申报个税吗?
  • 本年利润有余额么
  • 预提费用怎么做凭证
  • 如何制作u盘系统win7
  • 修改文件软件免费下载
  • Windows XP/Vista/Windows 7常见蓝屏故障分析
  • 电脑无法启动windows7
  • windows10 upnp
  • xp系统怎么和win7系统共享
  • windows账户升级为管理员
  • 如何输入密钥上网
  • 双硬盘 win10
  • linux系统基本操作命令
  • linuxshadow破解
  • Win7系统怎么打开蓝牙
  • errorlnk2019怎么解决
  • 微信小程序实现微信支付
  • elementtree修改节点属性
  • jquery实现页面切换
  • linux进程切换 宋宝华
  • 在一个android创建一个按钮多选对话框
  • jquery的validate前端表单验证
  • jQuery基于$.ajax设置移动端click超时处理方法
  • 江苏国税电子税务局开票流程
  • 常州市三免卡
  • 国家税务总局2011年34号公告
  • 年终奖怎么报个税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设