news 2026/8/6 2:12:38

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 2:10:54

零基础网站建设完全指南:从0到1搭建个人品牌网站的全流程解析

说到网站,很多人脑海里浮现的画面可能是满屏的代码、复杂的服务器配置,或者是那种只有技术极客才能看懂的黑底绿字界面。但在今天,这些刻板印象早就该被扔进历史的垃圾堆了。作为一名在这个行业里摸爬滚打多年的老手,我见过太多初学者因为恐惧“技术门槛”而望而却步,也见…

作者头像 李华
网站建设 2026/8/6 2:10:02

IGP快速重路由(FRR)原理与部署:从LFA到TI-LFA实现网络毫秒级切换

1. 项目概述&#xff1a;为什么IGP的快速重路由&#xff08;FRR&#xff09;是网络稳定的基石在网络工程师的日常运维和架构设计中&#xff0c;最怕听到的词可能就是“网络抖动”或“业务中断”。尤其是在核心骨干网或数据中心内部&#xff0c;一次路由收敛带来的秒级甚至亚秒级…

作者头像 李华
网站建设 2026/8/6 2:07:07

系统性能瓶颈诊断:从负载与驱动能力失衡看稳定性设计

1. 从一次深夜告警说起&#xff1a;负载与驱动能力为何是系统稳定的命门凌晨两点&#xff0c;手机屏幕突然亮起&#xff0c;刺眼的告警信息显示&#xff1a;“核心服务接口响应时间超过5秒&#xff0c;错误率飙升”。你睡眼惺忪地爬起来&#xff0c;登录服务器&#xff0c;看到…

作者头像 李华
网站建设 2026/8/6 2:07:01

债务催收公告登报怎么办理?实测4大渠道,避坑又省心!

前段时间&#xff0c;公司遇到个“老赖”&#xff0c;欠了几万块货款一直躲着不还&#xff0c;律师说必须办债务催收公告登报&#xff0c;既能履行法定告知义务&#xff0c;还能中断诉讼时效&#xff0c;为后续起诉铺路。我以前从没接触过这事儿&#xff0c;一头雾水&#xff0…

作者头像 李华
网站建设 2026/8/6 2:06:01

从0到1打造高质量多语言官网,探索专业做俄语网站建设的核心逻辑与实战避坑指南

在这个全球化的时代,越来越多的中国企业开始将目光投向北方那个广袤而神秘的邻国——俄罗斯。那里有丰富的资源,庞大的消费群体,以及对中国商品日益增长的需求。对于外贸企业来说,俄语市场无疑是一块诱人的蛋糕。然而,当大家摩拳擦掌准备出海时,很多人都会陷入一个误区:…

作者头像 李华
网站建设 2026/8/6 2:05:44

VMware虚拟机磁盘压缩实战:释放vmdk文件占用的宿主机空间

1. 虚拟机磁盘膨胀的“隐形杀手”与压缩的必要性如果你在Windows上用VMware Workstation或Player跑虚拟机&#xff0c;时间一长&#xff0c;可能会发现一个令人头疼的现象&#xff1a;宿主机上那个虚拟机磁盘文件&#xff08;通常是.vmdk格式&#xff09;的体积&#xff0c;像吹…

作者头像 李华