枚举
- 1. 概念
- 用来创建新数据类型的工具
- 2. 声明方法
- 使用enum关键字
- 包含多个名称
enum 枚举名称 {名称1, 名称2, ....};
-
3. 使用方法
- 每个枚举名称都可以作为整数使用
傻逼视频说了个几把,我也不知道我写的这是啥, 倒不如直接看别人写的【C语言】联合与枚举类型
#include <stdio.h>
int main() {
//enum season 合起来可以做类型名称 来声明 枚举变量
//枚举变量在内存里和整数类型变量一样,就是一个 整数类型存储区
//所以通常并不用声明枚举类型变量,所以声明枚举类型时会省略枚举类型本身的名称
//想使用枚举类型的时候,声明一个整数类型变量,然后把它当做枚举类型变量就行
// enum season {CHUN, XIA, QIU, DONG};
enum {CHUN, XIA, QIU, DONG};
//计算机为每个名称分配了一个对应的整数,在程序里面可以把这些名称当做整数来使用
//当声明了一个枚举类型变量的时候,这个变量也只能存放这些名称对应的整数
//这些名称叫做枚举值,每一个都可以当整数来用
//计算机给第一个名称 CHUN 分配的是 0, 第三个名称QIU 是 2
//如果声明时, XIA = 5 , 那么 QIU 就是6
printf("QIU是%d\n", QIU);
return 0;
}
联合
- 1. 概念
- 用来创建新数据类型的工具
- 2. 声明方法
- 使用union关键字
- 和结构体声明最大的区别就是关键字不同
union 联合名称 {
成员变量名称
}联合名称
- 3. 特点
- 所有成员变量的开始地址都一样
- 4. 使用方法
- 使用同一块内存记录不同数据(比如两组不可能同时存在的数据),以节省内存
#include <stdio.h>
//结构体中有多种不同类型的成员变量,每个成员变量在内存里对应的字节都是不一样的
//但是联合的成员变量在内存中开始的地址都是一样的,是互相重叠的。
//联合存储区的大小是最大成员变量存储区大小
typedef union tmp {
int val;
float fval;
} utmp;
int main() {
utmp tmp1 = {0};
printf("&(tmp1.val)是%p\n", &(tmp1.val));
printf("&(tmp1.fval)是%p\n", &(tmp1.fval));
return 0;
}
/*
output:
&(tmp1.val)是0x7ffcef92df00
&(tmp1.fval)是0x7ffcef92df00
*/