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

相关推荐
xiangyun614 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun614 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
Logic1016 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位
Escalating_xu6 小时前
【C语言常见概念】从第一行代码到字符串结束标志:一次打通编译、main、ASCII、转义字符与注释
c语言·c++
Navigator_Z6 小时前
LeetCode //C - 1250. Check If It Is a Good Array
c语言·算法·leetcode
SuperByteMaster8 小时前
freertos 任务创建方式
c语言
susplus9 小时前
【传感器DS18B20】51单片机上实现温度采集
c语言·51单片机·ds18b20·温度采集
Logic10110 小时前
C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
山下梅子酒22510 小时前
洛谷-入门-B2043
c语言
幼儿园蛋小黑12 小时前
【无标题】C语言变量,类型转换,运算符,输入和输出
c语言·嵌入式实时数据库