本篇核心知识:联合(union)、枚举(enum)、文件操作(FILE、读写)
一、联合(union)
概念
联合是复合数据类型 ,多个成员共享同一块内存,同一时间只能用一个成员。
特性
-
定义格式:与结构体类似
union 联合名 { 类型1 成员1; 类型2 成员2; }; -
内存特点:
-
所有成员共用首地址,同一时间仅一个成员有效。
-
总大小 = 最大成员的字节数(内存复用)。
-
-
初始化 :用
{}初始化第一个成员。 -
使用场景:节省内存、类型转换、多状态复用。
代码示例
union Data {
int num;
char ch;
float f;
};
int main() {
Data d;
d.num = 10;
cout << d.num << endl; // 10
d.ch = 'A';
cout << d.ch << endl; // A(num值被覆盖)
return 0;
}
相似概念比较:联合 vs 结构体
-
结构体:成员独立内存,总大小 = 各成员之和 + 对齐填充。
-
联合:成员共享内存,总大小 = 最大成员大小。
二、枚举(enum)
概念
枚举是自定义常量集合,用名字表示固定整数,提高代码可读性。
特性
-
定义格式:
enum 枚举名 { 常量1, // 默认从0开始 常量2 = 6, 常量3 // 自动+1,=7 }; -
默认值 :首常量默认
0,后续依次 +1;可手动指定值。 -
本质 :枚举常量是int 型常量,占 4 字节。
-
使用场景:状态标记、选项控制、游戏类型 / 角色状态。
代码示例
// 定义怪物类型
enum MonsterType {
SLIME, // 0
GOBLIN = 10,
ORC, // 11
BOSS = 100
};
int main() {
MonsterType m = SLIME;
cout << m << endl; // 0
m = BOSS;
cout << m << endl; // 100
return 0;
}
三、文件操作(C 语言)
概念
通过FILE类型指针,实现文件打开、读写、关闭,用于数据持久化。
特性
1. 核心要素
-
FILE*:文件指针,指向文件信息区。 -
头文件:
<stdio.h>。
2. 文件打开(fopen/fopen_s)
-
格式:
FILE* fopen(文件名, 打开方式); -
常用方式:
-
"w":写模式,不存在则创建,存在则清空。 -
"r":读模式,不存在则失败。 -
"wb"/"rb":二进制读写(速度快、不可读)。
-
-
安全版:VS 用
fopen_s(&文件指针, 文件名, 方式);。
3. 文件关闭(fclose)
-
格式:
int fclose(FILE*); -
作用:释放资源,必须操作。
4. 文件写(fwrite)
- 格式:
size_t fwrite(数据地址, 单个大小, 个数, 文件指针);
5. 文件读(fread)
- 格式:
size_t fread(缓冲区地址, 单个大小, 个数, 文件指针);
代码示例
#include <stdio.h>
int main() {
FILE* fp = fopen("test.txt", "w");
if (!fp) return 1;
// 写数据
char str[] = "hello";
fwrite(str, sizeof(char), 5, fp);
fclose(fp);
// 读数据
char buf[10] = {0};
fp = fopen("test.txt", "r");
fread(buf, sizeof(char), 5, fp);
fclose(fp);
printf("%s\n", buf); // hello
return 0;
}