C/C++ 基础笔记(九)
本篇核心知识:联合(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; }