位置: 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聊天机器人(小程序设计制作)

  • 最实用的网络推广四种方法(常用的网络推广平台有哪些呢)

    最实用的网络推广四种方法(常用的网络推广平台有哪些呢)

  • 笔记本温度过高怎么办(笔记本温度过高怎么办)(笔记本温度过高会自动关机吗)

    笔记本温度过高怎么办(笔记本温度过高怎么办)(笔记本温度过高会自动关机吗)

  • 小红书怎么删除自己作品(小红书怎么删除浏览记录)

    小红书怎么删除自己作品(小红书怎么删除浏览记录)

  • 苹果侧边按钮是什么(苹果手机左边第一个按键是什么)

    苹果侧边按钮是什么(苹果手机左边第一个按键是什么)

  • 苹果电池显示维修怎么关闭(苹果电池显示维修什么意思)

    苹果电池显示维修怎么关闭(苹果电池显示维修什么意思)

  • 电脑有横条纹还一闪一闪(电脑有横条纹还一闪一闪笔记本)

    电脑有横条纹还一闪一闪(电脑有横条纹还一闪一闪笔记本)

  • mate30录屏快捷方式是什么(mate 30录屏)

    mate30录屏快捷方式是什么(mate 30录屏)

  • 华为mate306+128和8+128区别(华为mate30 6+128和8+128的区别)

    华为mate306+128和8+128区别(华为mate30 6+128和8+128的区别)

  • 华为蓝牙耳机freebuds3防水吗(华为蓝牙耳机freebuds5i)

    华为蓝牙耳机freebuds3防水吗(华为蓝牙耳机freebuds5i)

  • 为什么流量卡网速慢(为什么流量卡网速慢怎么解决)

    为什么流量卡网速慢(为什么流量卡网速慢怎么解决)

  • 哔哩哔哩电视大会员和大会员的区别(bilibili大电视)

    哔哩哔哩电视大会员和大会员的区别(bilibili大电视)

  • ipad不激活可以查序列号吗(ipad不激活可以连接爱思助手吗)

    ipad不激活可以查序列号吗(ipad不激活可以连接爱思助手吗)

  • 苹果移动版能用电信卡吗(苹果移动版能用联通卡吗)

    苹果移动版能用电信卡吗(苹果移动版能用联通卡吗)

  • 属于外部储存器的是(下列存储器中,属于外部存储器的是____)

    属于外部储存器的是(下列存储器中,属于外部存储器的是____)

  • 为什么苹果手机闹钟设置了却不响(为什么苹果手机下不了软件)

    为什么苹果手机闹钟设置了却不响(为什么苹果手机下不了软件)

  • 手机删掉的软件怎么恢复(手机怎么恢复删掉的软件)

    手机删掉的软件怎么恢复(手机怎么恢复删掉的软件)

  • 抖音用户推荐是什么意思(抖音用户是怎么赚钱的)

    抖音用户推荐是什么意思(抖音用户是怎么赚钱的)

  • 苹果13系统正式版什么时候推送(iphone系统)

    苹果13系统正式版什么时候推送(iphone系统)

  • 美团怎么取消订单(美团怎么取消订座服务)

    美团怎么取消订单(美团怎么取消订座服务)

  • 红米note5aotg如何开启(红米note5怎么用)

    红米note5aotg如何开启(红米note5怎么用)

  • uhd是什么意思(相机uhd是什么意思)

    uhd是什么意思(相机uhd是什么意思)

  • xr支持3dtouch吗

    xr支持3dtouch吗

  • 前端网页设计必逛的六个宝藏网站(非常值得收藏)(前端网页设计的三大技术)

    前端网页设计必逛的六个宝藏网站(非常值得收藏)(前端网页设计的三大技术)

  • Python之字符串的遍历的4种方式(python字符串的符号)

    Python之字符串的遍历的4种方式(python字符串的符号)

  • 什么是原始凭证?审核原始凭证主要审查哪些内容?
  • 个税在资产负债表中体现吗
  • 出口消费税税率
  • 进口消费税为什么一定要组价
  • 微信小程序需要授权怎么设置
  • 门票可以直接入账吗
  • 税费滞纳金计入增值税吗
  • 会费要交增值税吗
  • 固定资产明细账怎么填
  • 货物发出未开票不确认收入
  • 留抵税额抵减欠税文件
  • 应收票据质押会计处理
  • 项目部租房办公应计入什么费用
  • 跨年发票冲红重新开具购买方做账不
  • 收到设备租金计入什么会计科目
  • 运输发票上的印章怎么弄
  • 印花税销售收入按50%计算征收
  • 存货扣税比是什么意思?
  • 计提坏账准备需要纳税调增吗
  • 资产负债表应收账款是负数怎么回事
  • 经营活动现金流量净额
  • 注册会计师考点分析
  • 销售返利是冲减收入还是做销售费用
  • 原始凭证日期大写要求
  • bootmgr is missing怎么手动解决
  • wiwin11
  • 计划成本是什么科目
  • 销户余额转出总公司怎样记账
  • 专项用途财政性资金纳税调整明细表
  • 公司卖旧车税务处理流程
  • 应收账款证券化流程
  • PHP:mdecrypt_generic()的用法_Mcrypt函数
  • 委托加工物资增值税计税依据
  • 未分配利润为负的原因
  • 公司投资资金
  • php 冒泡
  • 金蝶专业版固定资产初始数据录入
  • 固定资产一次性折旧政策2023
  • 蓝桥杯第十四届模拟赛第三期
  • vue虚拟domdiff算法
  • 技术服务增值税申报表怎么填
  • 高新技术企业研发费用加计扣除
  • 水电费是收据能入账不
  • java 读写锁 map
  • 材料暂估入库的依据有哪些
  • 安装使用漏电保护器是属于哪种安全措施
  • 将购入的原材料用于不动产在建工程
  • 销售劳务和销售货物的区别
  • 如何访问一台网络上的电脑
  • 专票抵扣税款的会计分录
  • 个人经营所得税怎么申报
  • 跨月发票作废如何恢复
  • 年底没有取得发票企业所得税
  • 折让折扣负数发票的会计处理
  • 不带息银行汇票
  • 赠送样品视同销售增值税该怎么做账务处理呢?
  • 价税分离购销合同模板
  • 丢失的发票怎么查询
  • 金蝶的数量金额明细账是怎么做的
  • 公司场地租赁交什么税
  • 航天信息服务费280元如何申报
  • 利润表每股收益增加说明什么
  • 过程要求可包括哪些内容
  • sqlserver数据导出导入脚本
  • sqlserver 附加数据库 只读
  • vrvedp_m.exe是什么进程
  • 怎么设置电脑开机启动项
  • win8如何关闭开始屏幕
  • win7虚拟内存最大设置多少
  • win7系统点击图标没反应
  • win8取消自动更新
  • nodejs 爬虫
  • node基础知识
  • python装饰器与递归算法详解
  • [置顶]游戏名 TentacleLocker
  • Cannot run program "/home/mohemi/Program/adt-bundle-linux-x86_64-20130729/sdk//tools/emulator": erro
  • 厦门市无纸化税务局官网
  • 税控盘红字发票开具流程
  • 汽车票用什么查
  • 企业完税证明怎么查询真伪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设