c语言进阶部分详解(详细解析自定义类型——枚举,联合(共用体))

news2025/1/11 14:59:20

上篇文章介绍了结构体相关的内容,大家可以点击链接进行浏览:c语言进阶部分详解(详细解析自定义类型——结构体,内存对齐,位段)-CSDN博客

各种源码大家可以去我的gitee主页进行查找:唔姆 (Nerowlp) - Gitee.com

今天要介绍的是:枚举与联合的相关内容


目录

一.枚举

1.枚举类型的定义 

 2.枚举的优点

3.枚举的使用

二.联合(共用体) 

1.联合类型的定义 

2.联合的特点

应用:判断当前计算机的大小端存储 

3.联合大小的计算


一.枚举

  • 枚举顾名思义就是一一列举
  • 把可能的取值一一列举

1.枚举类型的定义 

enum Sex//性别
{
   MALE,
   FEMALE,
   SECRET
};
enum Color//颜色
{
   RED,
   GREEN,
   BLUE
};
上述代码定义的 enum Sex enum Color 都是枚举类型。
{  } 中的内容是枚举类型的可能取值,也叫 枚举常量  
  • 这些可能取值都是有值的,默认从 0 开始,一次递增 1 ,当然在定义的时候也可以赋初值
enum Sex
{
	MALE,
	FEMALE,
	SECRET
};

int main()
{
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	return 0;
}

默认值便是从零开始: 

 

也可以自己进行主动赋值:

 

大家也可以猜一下这段代码输出什么:

enum Sex
{
	MALE,
	FEMALE=8,
	SECRET
};

int main()
{
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	return 0;
}

答案揭晓:

 

 

 2.枚举的优点

  1. 增加代码的可读性和可维护性
  2. #define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量

 

3.枚举的使用

enum Color//颜色
{
   RED=3,
   GREEN=2,
   BLUE=4
};
enum Color cl = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异

二.联合(共用体) 

1.联合类型的定义 

联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)
union A //定义一个共用体
{
	char a;
	int b;
};

int main()
{
	union A a; //创建一个共用体变量
	printf("%p\n", &a);
	printf("%p\n", &(a.a));
	printf("%p\n", &(a.b));
	return 0;
}

可以看到三个地址是一样的: 

 

 

2.联合的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小, 至少是最大成员的大小 (因为联合至少得有能力保存最大的那个成员)

应用:判断当前计算机的大小端存储 

union A //定义一个共用体
{
	char a;
	int b;
};
int judge()
{
	union A u;
	u.b = 1;
	return u.a;
}

int main()
{
	int a = judge();
	if (a == 1)
	{
		printf("是小端");
	}
	else
	{
		printf("是大端");
	}
	return 0;
}

众所周知vs2019 是小端储存: 

 

 

 

3.联合大小的计算

  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍
union U1
{
	char arr[5]; //5个字节  对齐数是1
	int a;  //4个字节   对齐数是4
};
int main()
{
	printf("%d", sizeof(union U1));//如果只是最大的成员变量的大小,那应当输出5
	return 0;
}

但结果是


 好啦,这次枚举,联合(共用体)就讲解到这里。下一次会继续记录我学习的过程。希望能对大家有所帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

Centos使用war文件部署jenkins

部署jenkins所需要的jdk环境如下: 这里下载官网最新的版本: 选择jenkins2.414.3版本,所以jdk环境最低得是java11 安装java11环境 这里直接安装open-jdk yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64下载jenkins最新…

python实验12_中文文本分析

实验12:中文文本分析 1.实验目标及要求 (1)掌握jieba库的常用方法。 (2)掌握使用WordCloud库绘制词云的方法。 (3)掌握使用networkx库绘制关系图的方法。 2. 实验主要内容 (1)分析文本“水浒…

ConcurrentHashMap底层具体实现知道吗?实现原理是什么

从这三个方面来回答: ConcurrentHashMap 的整体架构 ConcurrentHashMap 的基本功能 ConcurrentHashMap 在性能方面的优化 ConcurrentHashMap 的整体架构 这个是 ConcurrentHashMap 在 JDK1.8 中的存储结构,它是由数组、单向链表、红黑树组成. 当我们初始…

谈谈你对Spring的理解

谈谈你对Spring的理解 一,什么是Spring 1.介绍 Spring是一个用于开发Java应用程序的工具集合,它提供了许多方便的组件和工具,可以帮助开发者更轻松地构建企业级应用程序。 Spring Framework是Spring的核心部分,它可以帮助开发者…

windows的adb环境安装

需要配置androidhome和一些path

基于情感分析的网络舆情热点分析系统 计算机竞赛

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

2023年信息科学与工程学院学生科协第二次软件培训

2023年信息科学与工程学院学生科协第二次软件培训 文章目录 2023年信息科学与工程学院学生科协第二次软件培训一维数组数组的概念定义格式一维数组的访问例题:练习题: 数组元素数量一维数组的初始化 二维数组定义格式二维数组的访问二维数组的存储结构二…

实现多余内容变成省略号

实现效果 代码 <p class"item-content">{{ item.content }}</p>样式 .item-content {white-space: nowrap;/* 禁止换行 */overflow: hidden;/* 隐藏溢出部分 */text-overflow: ellipsis;/* 使用省略号表示溢出部分 */ }

21.4 Python 使用GeoIP2地图定位

GeoIP2是一种IP地址定位库&#xff0c;它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库&#xff0c;并提供一个方便的Python API。GeoIP2可以用于许多不同的应用程序&#xff0c;例如网站分析、广告定位和身份验证。GeoIP2提供了许多不…

达梦管理工具报错“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”

在使用达梦数据库管理工具时&#xff0c;我们测试过程中时常需要更新表数据&#xff0c;有时为了便捷&#xff0c;会直接使用管理工具修改表数据的值&#xff0c;但偶尔会遇到“结果集不可更新&#xff0c;请确认查询列是否出自同一张表&#xff0c;并且包含值唯一的列。”的报…

天津五家受欢迎的python培训机构 python凭什么这么火?

在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;非常容易上手&#xff0c;许多想学编程的小伙伴都从python入手&#xff0c;今天我们就来聊聊关于大家非常困惑的一些点&#xff0c;下面就一起来看看吧。 python火的原因 …

Java的反射(reflection)机制的简单使用

目录 一、定义 二、用途 三、反射基本信息 四、反射相关的类 五、反射示例 六、反射的优点和缺点 一、定义 Java的反射机制是运行时的状态&#xff0c;可以通过反射来调用类里面的属性和方法&#xff0c;私有的属性和方法也可以调用&#xff0c;也可以对它们进行修改。 二…

React 核心与实战2023版

课程亮点: 完整的前后台项目(PC+移动;完成业务;)React 最新企业标准技术栈(React 18 + Redux + ReactRouter + AntD)React + TypeScript (为大型项目奠定了基础)课程内容安排: React 介绍 React 是什么? React 是由Meta公司研发,是一个用于 构建Web和原生交互界面…

升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败

升级 IDE Xcode 15 后本地模拟器 Simulator 全被清空,反复重新尝试 Get 下载频频因网络异常断开而导致失败 ... 注:通过 Get 方式下载一定要保证当前网络环境足够平稳,网络环境不好的情况下该方法几乎成不了 解决办法 Get 方式行不通可以尝试通过 官网 途径先下载 模拟器安装包…

电脑待办事项提醒工具用哪个?

在一个繁忙的办公楼里&#xff0c;人们匆匆忙忙地穿梭着&#xff0c;电脑屏幕前的每个人都有着繁重的工作任务。为了应对这些任务&#xff0c;有人喜欢在纸上列出清单&#xff0c;有人则更愿意在电脑上记录&#xff0c;日常记录待办事项建议大家可以使用提醒工具敬业签。 敬业…

ubuntu 22.04 截图工具 shutter

sudo apt install shutter 快捷键F1 注意不支持wayland&#xff0c;登录时不要选择ubuntu wayland

Java并发编程第10讲——CAS相关知识点详解

前面介绍锁的时候顺便也提到了CAS&#xff0c;但作为JUC的“基石”和面试中的高频考点&#xff0c;还是不够。所以&#xff0c;本篇文章将从CAS的概念入手&#xff0c;逐步深入介绍12个Atomic原子操作类、CAS的实现原理&#xff08;源码解析&#xff09;、Unsafe类、CAS存在的问…

Oracle通过透明网关查询SQL Server 报错ORA-00904

Oracle通过透明网关查询SQL Server 报错ORA-00904 问题描述&#xff1a; 只有全表扫描SELECT * 时SQL语句可以正常执行 添加WHERE条件或指定列名查询&#xff0c;查询语句就报错 问题原因&#xff1a; 字段大小写和SQLSERVER中定义的不一致导致查询异常 解决办法&#xff1a; 给…

JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

堆内存调优 当遇到OOM时&#xff0c;可以进行调参 1、尝试扩大堆内存看结果 2、分析内存&#xff0c;看哪个地方出现了问题&#xff08;专业工具&#xff09; 调整初始分配内存为1024M&#xff0c;调整最大分配内存为1024M&#xff0c;打印GC细节&#xff08;如何添加JVM操…

「快学Docker」Docker镜像和容器的创建与管理

「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像&#xff1f;镜像获取和使用镜像获取镜像使用 什么是Docker容器&#xff1f;Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…