通关C语言自定义类型:联合和枚举

C语言的自定义类型 有四个分别是:数组;结构体(struct);联合体(union);枚举(enum)。前面已经讨论过数组和结构体,这期让我们来学习一下联合体和枚举类型。

一、联合体类型

1、联合体类型的声明

与结构体相似,联合体 也是由一个或者多个成员 构成,这些成员可以是不同的类型

但是编译器只为最大的成员分配足够的内存空间 。联合体的特点是所有成员共用同一块内存空间 。所以联合体也叫:共用体

给联合体其中一个成员赋值,其他成员的值也跟着变化。

2、联合体的特点

由上述代码运行结果,可知,联合的成员是共用同一块内存空间的(各个成员的起始地址和整个联合体的起始地址都相同),这样的话,我们也可以推知,一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

联合体的成员在同一时间只能使用其中一个成员。

3、联合体大小的计算

(1)联合的大小至少是最大成员的大小

(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

使用联合体是可以节省空间的。

4、相同成员的结构体和联合体对比

5、通过判断大小端程序进一步认识联合体

#include<stdio.h>

int check();

union Un

{

int i;

char c;

}un;

int main()

{

un.i = 1;

if (check())

{

printf("小端\n");

}

else

{

printf("大端\n");

}

}

int check()

{

return un.c;

}

二、枚举类型

1、枚举类型的声明

枚举 顾名思义就是一一列举。把可能的取值一一列举。比如我们现实生活中:

一周的星期一到星期日是有限的 7 天,可以一一列举;性别有:男、女、保密,也可以一一列举;月份有 12 个月,也可以一一列举;三原色,也可以一一列举。这些数据的表示就可以使用枚举了。

以上定义的enum Day就是枚举类型

{}中的内容是枚举类型的可能取值。也叫枚举常量 。这些可能取值都是有值的,默认从0开始 ,依次递增1,当然在声明枚举类型的时候也可以赋初值。

2、枚举类型的优点

我们知道可以使用 #define 来定义常量,那么枚举到底有什么魔力,可以让我们心甘情愿地使用枚举呢?

(1)枚举增加了代码的可读性和可维护性;

(2)和 #define 定义的标识符相比,枚举有类型检查,更加严谨;

(3)枚举便于调试,而 #define 定义的符号在预处理阶段会被删除;

(4)枚举使用方便,一次可以定义多个常量;

(5)枚举常量是遵循作用域规则的,如果枚举声明在函数内,就只能在函数内使用。

3、枚举类型的使用

需要注意的是:在C语言中可以拿整数给枚举变量直接赋值,但是在C++中是不可以的,因为C++中类型检查更加严格。

相关推荐
Bigan(安)21 小时前
【奶茶Beta专项】【LVGL9.4源码分析】09-core-global全局核心管理
linux·c语言·mcu·arm·unix
CoderYanger1 天前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
利刃大大1 天前
【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法
java·开发语言·枚举·lambda·排序
LinHenrY12271 天前
初识C语言(自定义结构:结构体)
c语言·开发语言
程序员Jared1 天前
深入浅出C语言——文件操作
c语言
CoderYanger1 天前
C.滑动窗口-求子数组个数-越长越合法——3325. 字符至少出现 K 次的子字符串 I
c语言·数据结构·算法·leetcode·职场和发展·哈希算法·散列表
点灯master1 天前
DAC8562的驱动设计开发
c语言·驱动开发·stm32
李绍熹1 天前
C语言基础语法示例
c语言·开发语言
法号:行颠1 天前
Chaos-nano协作式异步操作系统(六):`Chaos-nano` 在手持式 `VOC` 检测设备上的应用
c语言·单片机·嵌入式硬件·mcu·系统架构
南棱笑笑生1 天前
20251213给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时适配CTP触摸屏FT5X06
linux·c语言·开发语言·rockchip