自定义类型

引言:

C语言分为:1、内置类型

                     2、自定义类型: 1》结构体——每个成员有自己的空间

                                                 2》枚举型——定义多个常量

                                                 3》联合体——所有成员共用一快内存空间

一、结构体:

单独写过了一篇  关于结构体的介绍以及使用

二、 枚举型:

        所谓的枚举:就是一一例举,里面的内容为常量,把可能得值例举出来,比如周一到周日是七天,可以通过枚举来一一例举出来


类型建立:

enum 为枚举的关键词,下图关于枚举类型的申明:(注意我只写到了周六

 默认是从0开始   因此各个常量从上到下依次为 0 1  2  3   4  5  6    我们会从中多选一,这些 数值都被赋予了名称,比如:0的名称就是Mon;


枚举变量创建和命名空间

下面就是枚举型变量申明,第二个Day标识符为变量名   

变量名是可以随便取名的,但是我用了与枚举型的名称相同的部分,是想说下 命名空间

变量名类型名属于不同命名空间,他们的性质不同的  一个地名 一个姓名 区别就出来了:

所以相同的名字,不同的性质,即使名称相同,也不会有影响(相互独立) 

枚举的“=”符:

        在枚举中,枚举常量可以用赋值运算符进行赋值一个定值,那么没有给定 定值的,枚举常量会根据前一个枚举常量给自己默认一个定值即:前一个常量的定值+1

 

 注意:多个枚举常量允许定值是同一个值

如:我给Tues = 0,此时Mon默认会为 0,这种情况也是被允许的


使用:

如下:

enum Day
{Mon=1,Tues,wed,Thur,Fri,Sat,Sun};int main()
{enum Day Day;do {scanf("%d",&Day);if (Day > 7){printf("输入错误!!\n");}switch (Day){case Mon:printf("周一\n");break;case Tues:printf("周二\n");break;case wed:printf("周三\n");break;case Thur:printf("周四\n");break;case Fri:printf("周五\n");break;case Sat:printf("周六\n");break;case Sun:printf("周日\n");break;default:break;}} while (Day > 0);return 0;
}

优点:

1、可读性提升

2、于#define相比,有类型的检查,更加严谨

3、便于调试,预处理阶段会删除#define定义的符号

4、使用方便,一次可以定义多个常量

5、枚举遵循作用域,声明在函数中,只能在该函数中使用

补充:

可以在枚举常量例举完以后加一个 lnvalid(无效的)

三、联合体(共同体) :

类型建立:

和前面的自定义类型都是一个样:union为关键字 

声明:

 区别:和结构体有点类似,但是又不同,独特在于 他的成员共用一块空间,这样的话也就是每次使用时只能用一个成员,而结构体的话却是所有成员都能使用


创建联合体变量:同理和上述自定义类型的建立是一样的,不做赘述了

联合体的变量大小计算:

联合体特点:给联合体一个成员赋值,另一个成员的值也会跟着变化

根据这一特点,那么我们计算它的变量大小,是不是要考虑到:它的大小至少是最大成员的大小,不然最大成员都保存不了,那不就是一个没有用的“东西”!

sizeof计算其大小,如下:

 在这里:用到了之前结构体中的内存对齐这个知识点,最大的int型为4个字节,VS中默认对齐数是 8 ,那么对于int 型的对齐数为 4(最大对齐数也是4) 所以申请的内存大小如下:

 但是,还有一种情况,最大成员大小的不是最大对齐数的整数倍时,就要创建到最大对齐数的整数倍

如下 8为最大对齐数的整数倍

 我们是根据成员类型确定对齐数的,所以虽然数组char型有5个元素,说明需要5个字节,但是不影响我们的对齐数,找整数倍也要找到合适的,因为要2成员中任意成员都能用上


 实用性:

 假设商场有一个礼品清单:你去抽奖,只能中一个属性的商品,此时是不是就能用到联合体,商品的本身属性用联合体来描写,比起直接全部用联合体,节省了不少空间


 计算改编译器是大小端字节的哪一种:

VS中是小端             不懂大小端的可以看 ->大小端序列存储

这里传1比较好,若是传别的数会容易发生,因为char的大小为1字节,int大小为4字节;传1

的话就是00 00 00 01(方便观察,以16进制呈现),若是小端排序 则为01 00 00 00,char型占一个字节,将后面的00 00 00

截掉了,传其他数的话截取得到的数比较麻烦

 

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

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

相关文章

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

表空间的概述

目录 表空间的属性 表空间的类型 永久性表空间(PermanentTablespace) 临时表空间(Temp Tablespace ) 撤销表空间(Undo Tablespace) 大文件表空间(BigfileTablespace) 表空间的状态 联机状态(Online) 读写状态(Read Write) 只读状态(Read) 脱机状态(Offline) Oracle从…

Elasticsearch初步认识

Elasticsearch初步认识 ES概述基本概念正向索引和倒排索引IK分词器ik_smart最少切分ik_max_word为最细粒度划分 ES索引库基本操作对索引库操作对文档操作 ES概述 Elasticsearch,简称为 ES,是一款非常强大的开源的高扩展的分布式全文检索引擎&#xff0c…

谁能取代迈巴赫,征服互联网安全大佬周鸿祎?

‍作者 |老缅 编辑 |德新 4月18日,「周鸿祎卖车」登上了微博热搜。这位360创始人、董事长发微博称:自己做了一个艰难的决定,将把陪伴9年的迈巴赫600给卖掉。 随后,他解释道:「这是因为我需要体验新一代车的感觉。古人…

opencv图像处理详细讲

传统的计算机视觉框架: SimpleCV BoofCV Dlib JavaCV 深度学习计算机视觉框架 Caffe Tensorflow Pytorch Paddlepaddle Keras 深度视觉计算机视觉框架 OpenVINO TensorRT onnxruntime Deepface YOLO/DarkNet mmdetection Paddle-detection/seg/ocr …

重学java 29.经典接口

光阴似箭,我好像跟不上 —— 24.5.6 一、java.lang.Comparable 我们知道基本数据类型的数据(除boolean类型外)需要比较大小的话,直接使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个…

ECC 号码总结

1、问题背景 在手机开发过程中,经常遇见各种紧急号码问题,在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中,定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

Linux网络设置

配置网络相关设置 一般包括如下内容: 主机名 IP/netmask A B 路由:默认网关 DNS服务器 主DNS服务器 次DNS服务器 第三个DNS服务器 ping baidu 网络配置命令 ifconfig ifconfig -a #表示显示所有网卡包括没有启动的网卡 ifconfig 网卡名称 [up|down…

考研数学|基础跟张宇,强化直接1000题还是先做660?

跟宇哥用1000题的,我愿称之为卷王之王!660对基础阶段是绝佳的查漏补缺,必做! 自我介绍一下:我21年一战数学83,总分没过线,22年二战143,逆袭上岸211!660是我的心头好&…

js api part4

其他事件 页面加载事件 外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件 原因:有些时候需要等页面资源全部处理完了做一些事情,老代码喜欢把 script 写在 head 中,这时候直接找 dom 元素找不到。 事件…

简单介绍IIC通信协议

文章目录 一,简单介绍二,IIC物理层三,IIC通信时序1.起始位与停止位2.IIC读写地址位信号3.IIC应答信号4.IIC数据位收发信号 四,总线速率五,主机发送数据流程六,主机接收数据流程七,IIC的时钟延展…

力扣每日一题109:有序链表转换二叉搜索树

题目 中等 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0,-3,9,-10,null,5],它…

高效转化,智能私信软件策略揭秘

在数字营销的浪潮中,智能私信软件策略正成为提升转化率的重要工具。这种软件以其个性化、自动化的特点,正在重新定义与客户的互动方式,让企业能够更加高效地吸引并留住潜在客户。 智能私信软件的核心在于其高度的定制化和人性化设计。通过大数…

Android Handler用法

Android Handler用法 为什么要设计Handler机制?Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

今天发现个有意思的问题:java基础篇章网络编程的报错问题,顺便看一下各个GPT的实力

问题: 一个java socket网络编程的引发的异常,具体代码Client.java、Server.java,如下 Client.java package Test2;import java.io.*; import java.net.Socket;public class Client {public static void main(String[] args) throws IOExce…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时,正确配置 HTTP 请求头是关键步骤之一,尤其当使用诸如 JMeter 这样的强大工具时。在本文中,我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

中间件研发之Springboot自定义starter

Spring Boot Starter是一种简化Spring Boot应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter,例如spring-boot-star…

张大哥笔记:卖盗版网课,获利 100 万被抓

这几天刷视频,看到一个新闻,某大学生卖盗版网课,把别人2000多正版网课,以做活动名义售卖20元,获利100多万被抓。 下方图片来自:极目新闻 卖这种盗版网课,门槛低,成本低,…

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们,你是否在为抖音的推广效果而苦恼?看着别人家的视频轻松获得大量曝光,你是否也心生羡慕?今天,我们就来分享一个秘密武器,让你轻松提升抖音推广效果! 首先,让我们来了…