当前位置: 首页 > news >正文

C/C++ 基础笔记(九)

本篇核心知识:联合(union)、枚举(enum)、文件操作(FILE、读写)


一、联合(union)

概念

联合是复合数据类型,多个成员共享同一块内存,同一时间只能用一个成员。

特性

  1. 定义格式:与结构体类似

    union 联合名 { 类型1 成员1; 类型2 成员2; };
  2. 内存特点:

    • 所有成员共用首地址,同一时间仅一个成员有效。

    • 总大小 =最大成员的字节数(内存复用)。

  3. 初始化:用{}初始化第一个成员

  4. 使用场景:节省内存、类型转换、多状态复用。

代码示例

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)

概念

枚举是自定义常量集合,用名字表示固定整数,提高代码可读性。

特性

  1. 定义格式:

    enum 枚举名 { 常量1, // 默认从0开始 常量2 = 6, 常量3 // 自动+1,=7 };
  2. 默认值:首常量默认0,后续依次+1;可手动指定值。

  3. 本质:枚举常量是int 型常量,占 4 字节。

  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; }
http://www.gsyq.cn/news/1483374.html

相关文章:

  • 2026年 HC420/780DP高强钢厂家推荐榜单:汽车轻量化/冷成形性能/双相钢核心优势与选购指南 - 品牌发掘
  • 中央空调-水系统 全面解析
  • llama-cpp-python:llama.cpp 的 Python 绑定库
  • Agent 的规划、执行、反思闭环怎么实现?别把 Reflect 写成小作文
  • 信号处理实战:用db4小波分析你的传感器数据(MATLAB验证+C语言移植指南)
  • 【闲聊】孩子越长大为什么越不愿意和父母讲心里话(亿点不一样)
  • RuoYi-Vue + Flowable 6.5:一个Java程序员的容器化部署实战与源码踩坑记录
  • 神经渲染重塑未来城市:从NeRF原理到智慧城市场景全解析
  • 文本文件复制(字符缓冲流)
  • 2026东北号卡分销攻略:线上引流+线下锁单双模式,翼卡云领跑本地变现 - 卡圈快讯
  • 第【7】期--自由空间光通信(FSO)在Gamma-Gamma湍流信道下的BER性能仿真-maltab完整代码+报告
  • 【深度解析】从无状态 ChatBot 到有状态 AI Companion:大模型记忆系统原理与工程落地
  • 零基础落地!三个精益实操技巧,激活员工主动改善意识
  • PyTorch卷积层参数调参避坑指南:搞懂padding、stride和output_padding,告别形状不匹配报错
  • 别再死记硬背了!用Python模拟RDT协议(可靠数据传输)的发送与接收全过程
  • C语言多线程编程踩坑记:pthread_create传参类型不匹配警告的三种解法
  • 2026年常州企业老板力荐合同纠纷律师推荐:5位实战型专家值得信赖 - 本地品牌推荐
  • Word VBA调试时文件被锁死?教你用On Error GoTo跳过4198错误并释放文件
  • 透镜重构人员轨迹技术 赋能煤矿全域透明智慧监管
  • Go 泛型简明教程
  • 告别手动操作:用一段VBS脚本实现Windows Explorer智能重启与文件夹恢复
  • 基于双向遍历和海绵结构的密码杂凑算法MadStorm设计原理详解
  • 京东整店商品图片视频批量下载技术:从商品列表到自动分类
  • 2026年华为云OpenClaw/Hermes Agent配置Token Plan搭建保姆教程
  • AD9361接收功能验证踩坑记:从官方配置软件到SPI脚本的完整避坑流程
  • 弱口令与命令爆破 知识点总结
  • 基于ARX结构的新型序列密码算法FlashLight
  • APK签名流程深度解析:安卓应用安全的核心保障
  • 2026年资质齐全的样板间彩绘品牌企业推荐 - mypinpai
  • 2026年亿路交通设施口碑如何 - mypinpai