Skip to content

Repository files navigation

C 语言阶段

2026.06.17 – 2026.07.14 · 有效学习 18 天 · 从 malloc 是什么都不知道到多文件编译 + Makefile

项目地图

# 目录 项目 一句话
1 2026-06-22 GK1 · 学生成绩管理器 v1 单科成绩排序 + 文件读写—第一个完整 C 项目
2 2026-06-25 C1 · 学生成绩管理器 v2 三科成绩 + 嵌套动态数组 + 文件持久化—踩坑最密集的阶段
3 2026-07-13 GK2 · 中缀计算器(单文件) 双栈协作调度场算法—30 分钟跑通,方法论奏效
4 2026-07-14 C 收官 · 中缀计算器(多文件) 工程化拆分 + 头文件守卫 + Makefile—C 阶段收尾

技能树变化

timeline
    title C 语言学习进展
    6.17
        : malloc / free / realloc
        : 结构体
        : 文件读写
        : 指针与数组
    7.13
        : 双栈协作
        : 调度场算法
        : assert 守卫
        : 纸笔推演
        : 从零画版本到 30 分钟改代码
    7.14
        : 多文件编译
        : 头文件守卫
        : Makefile
        : 模块化设计
        : make clean && make
Loading

方法论

方法论 什么时候建立的 一句话
纸笔推演先行 C2a(7.09) 代码之前先理解结构—画出栈的每一步操作
注释骨架 → 填充 C2b(7.12) 分阶段编译,每阶段只写 5 行—破掉"从零写"的恐慌
踩坑日志 C1(6.25) 每个 bug 都是学习资源—#1 到 #54
valgrind 零泄漏才叫跑通 C1 不通过 valgrind 不算完工
从不依赖完整代码 全程 拿到方向自己推,GK2 只需要"五处改动"清单

踩坑精选(全系列 #1–#54)

# 日期 教训
1 6.25 #define M 3 后不加分号—宏是文本替换,分号会被一起替换进代码
2 6.25 指针声明 ≠ 分配—int *p; scanf("%d", p); 往 NULL 写数据
6 6.25 fopen("result.csv", "w") 文件不存在时创建空文件—fp 永不 NULL
8 6.25 结构体未初始化—total 是垃圾值,必须先清零再累加
23 7.13 apply_operator 先 pop right 再 pop left—栈是 LIFO,顺序不能反
37 7.13 sizeof(ptr) 不是数组大小—是指针大小(8 字节)
54 7.13 switch 后加 return—否则 control reaches end of non-void function

项目技术细节

GK1(6.22) C1(6.25) GK2(7.13) C 收官(7.14)
文件数 1 2 源码 + 数据 1 5(2 源码 + 2 头文件 + Makefile)
结构体 Student(单科成绩) Studentint *scores 嵌套数组) Stackdata[100] + top Stack(拆到独立模块)
指针层级 一级(Student * 二级Student ** 一级(Stack * 一级
动态分配 malloc + realloc malloc + realloc + 嵌套 malloc 无(固定数组)
文件 I/O fprintf / fscanf fprintf / fscanf + 反序列化
编译方式 gcc gk1.c gcc C1c.c gcc gk2.c make
内存验证 无(当时还没学) valgrind 11 allocs / 11 frees valgrind 2 allocs / 2 frees valgrind 0 errors, no leaks

学习心理变化

阶段 心理状态
6.17–6.21 "malloc 是什么"—从零开始,每步都是新东西
GK1(6.22) 组织程序好复杂,我能独立写出来吗?指针和 realloc 让人紧张,但第一个项目跑通很兴奋
C1c(6.25) 二级指针差点劝退,但踩坑日志让每次报错变成"学会了什么"
C2a → C2b(7.09–7.12) 纸笔推演 + 注释骨架—找到方法论,不再恐慌
GK2(7.13) 半小时跑通—"我理解了结构,不是在背代码"
C 收官(7.14) 主动发现模块边界问题—"stack.c 不需要重新定义 Stack"

核心转变:从"怕写不出来"到"我知道怎么一步步推出来"。

下一步

Java 阶段(7.15 – 开学前):面向对象范式切换,目标为 AstrBot 插件和 Minecraft Mod 打基础。

许可

学习项目,随意使用。

About

2026暑期 - C 语言阶段完整归档

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages