自定义类型:联合体和枚举

张开发
2026/4/10 10:39:18 15 分钟阅读

分享文章

自定义类型:联合体和枚举
接下来我要讲的两个自定义类型是联合体和枚举。这两个自定义类型对于很多人来说可能是第一次听说。但是其实这和我们前面学习的结构体是差不多的。接下来我就来给大家讲一讲这两个的具体知识点以及注意事项还有它们与结构体之间的区别。好了我们废话不多说现在开始我们的博客。1.联合体类型的声明联合体和结构体是产不多的。也是有多个成员变量构成的。这些成员可以是不同的类型。联合体的关键字是union。但是对于联合体来说他与结构体的一个主要区别就是联合体的所有成员都是共用一块内存空间。所以联合体也被叫做共用体。也就是说联合体中的一个成员发生改变其他成员都会发生改变。接下来我就来给大家写一个联合体出来。请看下面的图片。上面的图片展示的就是一个联合体的声明。接下来我就来给大家写一下联合体的一般声明的形式。大家请看下面的代码块。union name//联合体名字 { member-list//联合体成员列表 };感兴趣的朋友也可以按照上面的形式来创建一个联合体。2.联合体的特点在上面的博客中我提到了联合体中的成员都是共拥有一块内存的接下来我就来给大家西俄代码展示一下顺便验证一下我上面的话是否正确。大家请看下面的代码图片以及它的运行结果。大家看到没有无论是联合体的整体还是联合体里面的成员变量的地址都是一样的。这就验证了联合体就叫做共用体。那么既然联合体公用同一块内存那么当我改变上面其中之一的成员变量那么其他的成员变量也会随之改变。大家请看下面的代码图片。大家看到没有我把i赋值为11223344但是因为c的赋值而改变了i的值。这也就验证了上面我说的只要改变联合体中的一个成员变量就会改变另外的成员变量。为了让大家更好理解接下来我就来画一张图让大家好好理解理解这其中的道理。大家请看下面的图片。上面的图片就是模仿联合体在内存中的存储方式看了这个图我就希望大家可以更好的理解理解联合体被成称为共用体的原因希望大家可以更好的理解。3.联合体大小的计算像之前的博客一样既然联合体和结构体差不多那是不是它的大小呵呵结构体一样也存在内存对齐的规则呢其实联合体的大小比结构体的大小简单多了。他不存在内存对齐。接下来我就来给大家讲一讲联合体的大小计算方式。1.联合体的大小至少是成员变量中的最大的那一个2.当联合体中的最大成员变量的大小不是最大对齐数的整数倍时此时的联合体的大小为最大对齐数的整数倍这里的最大对齐数的概念在上一篇博客中讲过这里就不再赘述接下来我就来给大家演示一个联合体的大小计算。请看下面的图片。好了上面的两个例子就是联合体大小的计算方式。大家也可以看看自己有的联合体然后自己尝试计算一下。4.枚举类型的声明大家在看到枚举的时候可能会有点懵可能就是在想什么是枚举。其实很简单枚举就是一一列举的意思。就是把可能的取值都一一列举出来。就像一些我们生活中的例子一样。性别可以一一列举星期看可以一一列举三原色也是可以一一列举的。接下来我就来用星期的例子来写一个枚举给大家看看大家请看下面的图片。上面的图片展示的就是一个关于星期的枚举的声明。接下来我会通过这个例子来给大家讲一讲枚举的一些知识点。1.枚举的关键字为enum2.花括号中的成员都是以逗号隔开最后一个成员是不带逗号的这些都叫做可能取值3这些可能取值编译器都会编号都是从0开始的。当自定义了第一个取值的编号时下面的取值就会按照自定义的编号向下取值上面的知识点3我就用代码以及结果的方式给大家展示一下。编译器编号自定义编号5.枚举类型的优点大家不要看枚举很麻烦其实枚举还是有很多优点的大家看下面的枚举的特点。6.枚举类型的使用接下来我就来给大家展示一下枚举的使用大家请看下面的代码。好了今天的博客就分享到这里了希望我的博客对你的C语言学习有帮助我们下一篇博客再见

更多文章