第二十章(自定义类型,联合和枚举)

news2024/11/26 0:56:06

1. 联合体类型的声明

2. 联合体的特点

3. 联合体⼤⼩的计算

4. 枚举类型的声明

5. 枚举类型的优点

6. 枚举类型的使⽤

            光阴如骏马加鞭

一、联合体

概念:像结构体一样,联合体也是由一个或者多个成员组成的,这些成员也可以是不同的类型。

这里我们需要注意的是:编译器只会为最大的成员分配足够内存空间。联合体的特点是所有成员共用一块内存空间。
所以联合体,又叫共用体

  1. 给联合体内部的一个值赋值,其它的值也会跟着变化
union s
{
	char i ;
	int a;
};

int main()
{
	printf("%zd ", sizeof(union s));
	return 0;
}

在这里插入图片描述
那么 为什么结果是4呢?

1.2 联合体的特点:因为联合体是共用一块空间的,所以联合体至少要有能够保护最大的能力
这里我们来用代码来检验一下

union s
	{
		char i ;
		int a;
	};
	
	int main()
	{
		union s s1 ;
		printf("%p\n", &(s1.i));
		printf("%p\n", &(s1.i));
		printf("%p\n", &(s1));

		return 0;
	}

在这里插入图片描述


union s
	{
		char c ;
		int i;
	};
	
	int main()
	{
		union s s1 = {0};
		s1.i = 0x11223344;
		s1.c = 0x55;

		printf("%x\n", s1.i);
		return 0;
	}

在这里插入图片描述
为什么输出结果是这样的呢?接下来我们就来画图解释
在这里插入图片描述
1.3相同成员的结构体和联合体对比
在这里插入图片描述
我们能够看出来的是,联合体会很好的节约空间

这里我们来写一个判断程序的大小端的代码

int test()
{
	union s
	{
		char i;
		int a;
	}s1;
	s1.a = 1;
	return s1.a ;
}

int main()
{
	int ret = test();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}

	return 0;
}

二、 枚举类型
2.1枚举类型的声明
枚举类型我们从表面的意思就可以很好的了解,是一一例举出来的意思。
例子:
1.一年的月份 1到12月
2.一周的天数:星期一到星期日
3. 性别 男 女 保密

这些类型我们就可以用枚举了

enum Day
{
    Mon,
	Tue,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun,

};


int main()
{
	return 0;
}

{ }的内容都是枚举类型的可能取值,我们称之为枚举常量
在声明枚举类型的时候我们是可以给其赋值的。

enum Day
{
	Mon = 1,
	Tue = 2 ,
	Wed = 3,
	Thur= 4,
	Fri = 5,
	Sat = 6,
	Sun = 7,

};


int main()
{
	return 0;
}

2.2枚举类型的优点
我们为什么要使用枚举呢?
#define就可以定义常量我们为什么非要使用枚举类型呢?
1.增加代码的可读性和可维护性
2.与define定义的标识符相比较,枚举类型更容易检查,更加严谨。
3.方便调试,用define定义的常量在预处理阶段会被替换
4.方便使用,可以定义多个常量
5.遵循作用域的规则

2.3 枚举类型的使用

在这里插入图片描述
这里我们发现,在c语言中我们可以拿整数给枚举变量赋值,但是在c++中这是不行的。

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

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

相关文章

JavaSE篇:文件IO

一 认识文件 在硬盘这种持久化存储的I/O设备或其他存储介质中 ,当我们想要进行数据保存时,往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概念。就类似办公桌上的⼀份份真实的⽂件⼀般。…

疾风气象大模型如何预测气象数据,预测数据怎么获得

随着科技的快速发展,人工智能和大数据技术逐渐渗透到各个领域,气象预测也不例外。过去,气象预测主要依赖于物理模型,结合大气、海洋、陆地等系统的观测数据,通过复杂的数值计算来推测未来天气。而如今,大模…

八、跳跃、闪避

一、人物跳跃功能 1、动画 设置一个bool值 条件设置为true 2、逻辑 实现跳跃,一定有IsGround;判断是否为地面,进行跳跃功能 写一个跳跃和一个条约结束方法 跳跃设置为false,结束设置为true 3、代码 public void Jump() {if…

Ray_Tracing_In_One_Weekend下

1Lambertian漫反射材质 一个物体的材质,可以分成两部分来看,因为物体没有绝对光滑和绝对粗糙 漫反射:由于物体粗糙,那么对于微小平面,光线会向四周反射,光源的一部分光线传回人眼 镜面反射:假…

C++ 类和对象的初步介绍

文章目录 1.面向过程和面向对象的初步认识2.类的引入3.类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化 1.面向过程和面向对象的初步认识 C语言是面向过程的,关注的过程,分析出求解问题的步骤,通过函数调用…

OpenCV Canny()函数

OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下: 高斯滤波:使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器,可以消除图像中的高频噪声,同时保留边缘信息。计算梯度强度和方向:使用Sobe…

教资备考--高中数学(仅为高中数学梳理)

按照高中学习数学梳理的方案进行整理

爬虫——同步与异步加载

一、同步加载 同步模式--阻塞模式(就是会阻止你浏览器的一个后续加载)停止了后续的解析 因此停止了后续的文件加载(图像) 比如hifini音乐网站 二、异步加载 异步加载--xhr(重点) 比如腾讯新闻,腾讯招聘等 三、同…

组合框QGroupBox设置checked属性

我们可以给组合框设置checked属性 //获取和设置checked属性是否开启 bool isCheckable() const void setCheckable(bool checkable)//获取和设置选中还是非选中 bool isChecked() const void setChecked(bool checked)效果如下: 如果checked属性使能之后&#xff0…

Open3D实现点云数据的序列化与网络传输

转载自个人博客:Open3D实现点云数据的序列化与网络传输 在处理点云数据的时候,有时候需要实现点云数据的远程传输。当然可以利用传输文件的方法直接把点云数据序列化成数据流进行传输,但Open3D源码在实现RPC功能时就提供了一套序列化及传输的…

用langchain+streamlit应用RAG实现个人知识库助手搭建

RAG原理概述 RAG(Retrieval-Augmented Generation) 是一种结合了信息检索和生成式人工智能技术的模型架构,旨在让模型生成更有根据和更准确的回答。通俗来讲,它让模型不只是凭借自己的“记忆”(预训练数据&#xff09…

Java中的依赖注入(Dependency Injection, DI)详解

Java中的依赖注入(Dependency Injection, DI)是软件工程中的一种重要设计模式。它有助于提高系统的可测试性、可维护性和灵活性。通过依赖注入,组件不再负责创建它们所需的对象,而是通过外部的设置来提供这些对象。这种方式也与控…

无人机+无人车+机器狗:综合管控系统技术详解

无人机、无人车、机器狗的综合管控系统技术是一个集成了多种先进技术和设备的复杂系统,旨在实现高效、精准、协同的作业与管理。以下是对该系统技术的详细解析: 一、系统概述 综合管控系统通过集成无人机、无人车和机器狗等智能设备,结合物…

OSDU轻量化单机部署

首先更新系统 sudo apt update sudo apt upgrade -y安装docker sudo apt install -y docker.io sudo systemctl start docker sudo systemctl enable docker安装minikube curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 …

vmware Workstation16设置批量虚拟机开机自启 vmAutoStart

文章目录 前言解压压缩包一、使用步骤1.获取虚拟机所在目录2.获取vmware所在目录3.测试启动4.开机自启 二、gitee总结 前言 vmware workstation16不支持虚拟机开机自启,通常的办法是写脚本,但是有个问题就是不能启动多台虚拟机,因为有时候会…

Python | Leetcode Python题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()m, n len(g), len(s)i j count 0while i < m and j < n:while j < n and g[i] > s[j]:j 1if j < n:count 1i …

Spring框架使用Api接口实现AOP的切面编程、两种方式的程序示例以及Java各数据类型及基本数据类型的默认值/最大值/最小值列表

一、Spring框架使用Api接口-继承类实现AOP的切面编程示例 要使用Spring框架AOP&#xff0c;除了要导入spring框架包外&#xff0c;还需要导入一个织入的包org.aspectj&#xff0c;具体maven依赖如下&#xff1a; <dependency><groupId>org.springframework</gr…

JAVA-异常(通俗易懂)

目录 一、异常的概念 1.算术异常 2.数组越界异常 3.空指针异常 二、异常体系结构 三、异常的分类 1. 编译时异常 2. 运行时异常 四、异常处理 1.防御式编程 2.异常的抛出 3.异常的捕获 4.try-catch捕获并处理 5.finally 五、异常的处理流程 六. 自定义异常类…

ade20k 街景图像【数据集】及其【论文出处】ADE20K数据集 超过25000张图像的语义分割数据集

ade20k 街景图像【数据集】及其【论文出处】ADE20K数据集介绍 是一个包含超过25000张图像的语义分割数据集&#xff0c;这些图像被密集注释&#xff0c;覆盖室内和室外场景。 它由MIT发布&#xff0c;包含100个事物类别和50个物质类别&#xff0c; 用于训练和验证的图像数量分别…

(16)MATLAB仿真Nakagami-m分布1

文章目录 前言一、Nakagami分布二、MATLAB建模代码三、仿真结果画图四、总结 前言 Nakagami衰落模型最初是由于该模型与短波电离层传播的经验结果相匹配而提出的。它还用于仿真来自多个干扰源的情况&#xff0c;因为多个独立且同分布&#xff08;i.i.d&#xff09;的瑞利分布随…