通关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++中类型检查更加严格。

相关推荐
顾安r20 分钟前
11.8 脚本网页 星际逃生
c语言·前端·javascript·flask
LaoZhangGong1231 小时前
STM32 F103外部晶振8MHz改为12MHz,如何配置?
c语言·stm32·单片机·嵌入式硬件·晶振
杨福瑞4 小时前
数据结构:单链表(2)
c语言·开发语言·数据结构
GilgameshJSS5 小时前
STM32H743-ARM例程38-UART-IAP
c语言·arm开发·stm32·单片机·嵌入式硬件
apocelipes7 小时前
POSIX兼容系统上read和write系统调用的行为总结
linux·c语言·c++·python·golang·linux编程
是苏浙8 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法
雾岛听蓝9 小时前
算法复杂度解析:时间与空间的衡量
c语言·数据结构·经验分享·笔记
Nebula_g9 小时前
C语言应用实例:学生管理系统1(指针、结构体综合应用,动态内存分配)
c语言·开发语言·学习·算法·基础
laocooon52385788610 小时前
C语言 有关指针,都要学哪些内容
c语言·数据结构·算法
Nebula_g11 小时前
C语言应用实例:硕鼠游戏,田忌赛马,搬桌子,活动选择(贪心算法)
c语言·开发语言·学习·算法·游戏·贪心算法·初学者