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

C语言进阶学习笔记:内存函数、结构体、共用体与文件操作

前言

近期完成C语言后半段进阶内容学习,从内存拷贝函数,到结构体对齐、枚举共用体,再到基础文件操作,把容易踩坑的知识点整理复盘,配套练习代码上传仓库。

代码仓库:https://gitcode.com/gcw_RyL6LF93/study-c-languague.git

一、内存操作系列函数(<string.h>)

1. memcpy 内存拷贝

作用:拷贝num个字节内存数据,支持任意类型数据复制,不处理内存重叠场景。

原型:void* memcpy(void* dest, const void* src, size_t num);

坑点:遇到两块内存区域重叠时,拷贝数据会被覆盖,结果出错;只负责按字节搬运,不会自动追加'\0'。

2. memmove 可重叠拷贝

原型:void* memmove(void* dest, const void* src, size_t tn);

核心逻辑:先判断两块内存是否重叠

如果 dest > src:从后向前倒着拷贝字节,防止源数据被提前覆盖

如果 dest < src:从前向后顺序拷贝

memmove可以兼容重叠拷贝,memcpy标准不要求处理重叠,日常练习尽量区分两者使用场景。

3. memset 内存设置

按字节填充内存值,常用于数组清零;

易错:第二个参数是单字节数值,不要直接填充int大数,容易出现意料之外的值。

补充:strerror用于返回错误码对应的文字描述。

二、结构体 struct

自引用结构体:结构体内部包含指向自身类型的结构体指针,链表节点就是典型用法。

struct node

{

struct node* next;

};

typedef重命名结构体类型,简化书写。

访问成员:结构体变量 .成员名;结构体指针 ->成员名。

✨结构体内存对齐规则(高频考点)

第一个成员放在偏移量为0的地址处;

后面每个成员,对齐到自身大小与默认对齐数之间较小值的整数倍地址;

整体结构体大小:是结构体最大对齐数的整数倍;

对齐本质:牺牲一点内存空间,换取CPU读取内存的速度,属于空间换时间。

三、共用体 union、枚举 enum、typedef

共用体(联合体 union)

大小等于内部占用空间最大成员的大小;

所有成员共用同一块内存,修改一个成员的值,其余成员数据会被覆盖。

枚举 enum

把一组整型常量打包起名,默认从0依次自增;可以手动指定枚举常量的数值。

typedef 类型重命名

给已有类型起别名,简化长类型名书写,结构体搭配typedef使用非常频繁。

四、文件基础操作

FILE* fp:文件指针,用来标记操作的文件流;

fopen():打开文件;

fprintf():向文件写入数据;

fclose():关闭文件,用完文件一定要关闭,避免资源泄漏。

五、学习小结

这一段知识点偏向底层内存逻辑,不再只关注表层语法。

内存重叠拷贝、结构体内存对齐是很容易理解模糊的地方,手写代码调试才能把抽象的内存变化看懂。

全部练习代码存放在仓库,后续继续更新C语言收尾练习,准备过渡单片机学习。

仓库链接:https://gitcode.com/gcw_RyL6LF93/study-c-languague.git

http://www.cnnetsun.cn/news/3859820.html

相关文章:

  • 零基础网站建设完全指南:从0到1搭建个人品牌网站的全流程解析
  • IGP快速重路由(FRR)原理与部署:从LFA到TI-LFA实现网络毫秒级切换
  • 系统性能瓶颈诊断:从负载与驱动能力失衡看稳定性设计
  • 债务催收公告登报怎么办理?实测4大渠道,避坑又省心!
  • 从0到1打造高质量多语言官网,探索专业做俄语网站建设的核心逻辑与实战避坑指南
  • VMware虚拟机磁盘压缩实战:释放vmdk文件占用的宿主机空间
  • PostgreSQL与pgAdmin 4实战指南:从安装配置到权限管理与性能优化
  • 解决Windows笔记本电脑睡眠、休眠模式耗电异常,导致没电关机且无法开机问题
  • 活动图与状态机在工作流设计中的实践指南
  • 揭秘北京网站建设 fim 的底层逻辑与实战避坑指南
  • 【国产大模型性能黑盒解密】:实测23个开源/闭源模型在C-Eval、Gaokao-Bench、CMMLU及企业级RAG场景下的真实表现差异
  • 硬件自动化测试入门:从SCPI指令到Python框架的实战指南
  • 浏览器资源拦截的架构设计与工程实践
  • 狼人杀咒狐角色深度解析:生存法则与胜利策略
  • 电子商务网站建设维护实训报告与实战经验复盘总结
  • Allegro PCB设计:器件限高区域设置实战指南与避坑
  • 无线信道建模:从基础概念到5G实践
  • 安陆网站建设怎么做才能让本地企业脱颖而出深度解析实战策略与避坑指南
  • 3分钟解锁Figma中文界面:告别英文障碍,设计师效率翻倍的秘密武器
  • Windows下MySQL安装配置全攻略:从版本选择到故障排查
  • 如何快速将脚本转换为独立应用:AutoJs6打包终极指南
  • 蒸汽求职如何帮助学生比较不同职业机会?
  • 如何快速配置钉钉位置模拟:3步实现灵活打卡的终极指南
  • Android Studio开发个性化背单词APP实战指南
  • 网站建设销售技巧:从痛点挖掘到成交闭环,资深顾问的实战真经
  • 固定资产管理最大的坑,从来不是盘点那天——而是剩下的364天
  • 光储充换电站优化模型:动态电价与用户响应策略
  • 论文选题怎么定?AI辅助选题避坑指南,26届别踩雷
  • AI应用架构:智能时代的“大脑“
  • RS触发器相位检测器:原理、实现与在锁相环/CDR中的应用