这门课解决什么痛点,适合谁学

C语言常被视作程序员的“内功”修炼场,但市面上多数教程要么过于陈旧,要么只讲语法不讲工程规范。这套课程的核心价值在于“重塑编程思想”与“建立工程化基础”。它不满足于让学生会写 `hello world`,而是着重解决初学者在面对复杂报错时无从下手、代码风格混乱难以维护、以及对内存和指针缺乏直觉这两个核心痛点。

本课程非常适合零基础的转行者,以及具备其他高级语言经验但想深入理解底层机制的开发者。如果你希望摆脱“只会调包”或“只会写脚本”的状态,想要搞清楚数据在内存中是如何存储、变量作用域如何影响逻辑、以及如何像专业工程师一样进行代码调试,这门课是极佳的起点。它特别适合那些准备从事嵌入式开发、系统编程,或者希望从根本上夯实计算机底层原理的学习者。

学完能独立做什么,建议先看哪几块

完成学习后,你将能够独立搭建跨平台的 C 语言开发环境(Windows 与 macOS),并掌握标准的代码调试技巧。更重要的是,你将具备阅读和编写符合工业界规范(如 Google C Code Style)代码的能力,能够清晰区分常量与变量在内存中的不同表现,并能熟练运用运算符、分支结构和循环结构解决基础算法问题。你可以独立完成如“猜数字游戏”等逻辑完整的控制台程序,为后续学习数据结构与算法打下坚实基础。

建议优先攻克第三章“C语言快速入门”中的数据类型、变量常量、运算符及控制流部分,这是构建编程思维的骨架。同时,务必重视第二章“C语言必备基础”中的环境配置与调试方法,很多初学者放弃并非因为不懂语法,而是因为在配置环境和排查编译错误时受阻。此外,关于 `main` 函数重复定义、路径包含中文等常见问题的章节也应一并仔细阅读,这些细节能避免你在实战中踩大量不必要的坑。

资料包如何配合练习达到最佳效果

本课程的资料包设计紧密围绕“边学边练”的原则,建议按照章节顺序同步推进。在学习完每个知识点后,不要仅仅观看演示视频,而应手动复现案例代码,例如在学完运算符后,尝试修改例题中的逻辑来观察输出变化,以此验证自己对隐式类型转换等难点的理解。

对于环境配置环节,建议分别在自己的 Windows 和 macOS 机器上实操一遍,记录每一步的配置细节,这将是你未来解决环境兼容性问题的宝贵经验。在练习函数与作用域时,可以尝试利用调试工具观察内存地址的变化,直观感受指针背后的逻辑。通过这种“理论-复现-调试-观察”的闭环练习,你能更高效地将课程中的知识转化为实际动手能力,真正实现从“知道”到“会用”的跨越。

课程目录

第1章 课程导学 2 节 | 7分钟 1-1 课前必读.mp4
 1-2 课程介绍与学习指南 (06:20).mp4
 第2章 C语言必备基础 9 节 | 61分钟 2-1 Windows 环境配置 (18:23).mp4
 2-2 macOS 环境配置 (10:27).mp4
 2-3 程序调试方法 (12:12).mp4
 2-4 C语言的代码风格【Google C CodeStyle/CLion配置代码风格】 (11:53).mp4
 2-5 常见问题:老师是如何答疑的? (01:58).mp4
 2-6 常见问题:main 函数重复定义的问题如何解决? (03:01).mp4
 2-7 常见问题:为什么路径中不能含有中文字符? (02:14).mp4
 2-8 【加餐】背景知识.mp4
 2-9 代码编写为什么要遵从一定的规范?.mp4
 第3章 C语言快速入门 

13 节 | 142分钟 3-1 数据类型之int类型【不同系统版本差异】 (16:31).mp4
 3-2 数据类型之char类型【常见问题解决】 (15:11).mp4
 3-3 数据类型之浮点类型【实际应用技巧】 (09:43).mp4
 3-4 变量【内存地址分析】 (10:00).mp4
 3-5 常量【常量修改秘笈】 (11:54).mp4
 3-6 运算符-1【易踩坑点】 (16:01).mp4
 3-7 运算符-2【难点突破】 (09:54).mp4
 3-8 条件分支语句 (16:05).mp4
 3-9 循环语句 (17:18).mp4
 3-

10 案例:猜数字的游戏 (08:04).mp4
 3-

11 常见问题:如何修改源文件的编码? (04:23).mp4
 3-

12 常见问题:如何打印宽字符? (03:32).mp4
 3-

13 常见问题:修改 const 变量为什么不生效? (02:56).mp4
 第4章 函数与程序结构 6 节 | 56分钟 4-1 函数基础【tips:Google命名规范】 (06:41).mp4
 4-2 函数的原型【空参数列表与 C++的区别】 (08:50).mp4
 4-3 变量的类型和作用域【Compiler Explorer查看汇编指令】 (16:31).mp4
 4-4 函数的变长参数【对比Java的变长参数】 (07:10).mp4
 4-5 函数的递归【C语言实现斐波那契数列】 (10:22).mp4
 4-6 案例:汉诺塔 (05:29).mp4
 第5章 预处理和宏 6 节 | 59分钟 5-1 文件包含【领略编译器宏之以小搏大】 (09:45).mp4
 5-2 案例:自定义头文件 (07:35).mp4
 5-3 宏函数 (10:46).mp4
 5-4 条件编译【掌握实际应用场景】 (11:15).mp4
 5-5 案例:实现 PRINTLNF (13:26).mp4
 5-6 . 常见问题:遇到问题该怎么办?干这行真的需要天赋吗? (06:02).mp4
 第6章 玩转数组 

10 节 | 87分钟 6-1 数组基础【C语言设计哲学】 (10:34).mp4
 6-2 数组的边界 (09:50).mp4
 6-3 字符串 (08:35).mp4
 6-4 函数的数组类型参数【C语言极致效率之源】 (04:45).mp4
 6-5 二维数组【数组参数的正确使用姿势】 (10:11).mp4
 6-6 案例:打乱数组的顺序【各种场景应用】 (06:02).mp4
 6-7 案例:数组元素的排序【Lomuto分割法】 (11:04).mp4
 6-8 常见问题:数据名与指针有什么区别? (06:18).mp4
 6-9 常见问题:一维数组与二维数组有什么区别? (15:00).mp4
 6-

10 常见问题:io_utils 定义在哪里? (04:18).mp4
 第7章 吃透指针 

11 节 | 106分钟 7-1 指针基础【摸清本质带你爱上指针】 (09:05).mp4
 7-2 只读指针变量与只读变量指针 (04:43).mp4
 7-3 特殊的指针【使用禁忌】 (09:35).mp4
 7-4 指针的运算【各式魔法操作】 (10:26).mp4
 7-5 左值和右值【只需记住这两点】 (06:54).mp4
 7-6 指针参数作为返回值【通过汇编了解函数返回值机制】 (11:21).mp4
 7-7 动态内存分配【突破面试高频考点】 (14:30).mp4
 7-8 函数指针与typedef (14:09).mp4
 7-9 案例:交换两个变量的值 (14:49).mp4
 7-

10 案例:指针版本的快速排序【Hoare分割法】 (10:03).mp4
 7-

11 为什么指针的值(内存的地址)也是整数?为什么还有 32 位和.mp4
 第8章 聚合数据类型 6 节 | 76分钟 8-1 结构体【内存占用分析】 (15:34).mp4
 8-2 结构体的内存对齐【内存占用优化】 (14:59).mp4
 8-3 联合体【使用场景分析】 (08:32).mp4
 8-4 枚举【多语言对比】 (12:25).mp4
 8-5 案例:判断字节序 (07:03).mp4
 8-6 案例:单链表的基本实现 (16:47).mp4
 第9章 字符串的应用 

11 节 | 73分钟 9-1 判断字符的类型及原理的剖析 (08:59).mp4
 9-2 字符串与其他数值类型的转换 (14:21).mp4
 9-3 字符串的长度与比较 (07:34).mp4
 9-4 查找字符与子串 (06:00).mp4
 9-5 字符串的拆分 (09:41).mp4
 9-6 字符串的连接和复制 (03:14).mp4
 9-7 几个常见的内存操作函数 (07:51).mp4
 9-8 C99的restrict (02:01).mp4
 9-9 C11的安全版本的函数 (03:44).mp4
 9-

10 宽字符串与窄字符串的转换 (08:56).mp4
 9-11 什么是字符集?什么是编码?为什么需要编码?.mp4
 第10章 时间的应用 6 节 | 49分钟 10-1 时间的基本概念 (08:50).mp4
 10-2 获取系统时间 (13:25).mp4
 10-3 获取日历时间 (06:36).mp4
 10-4 格式化时间 (07:42).mp4
 10-5 解析时间 (07:57).mp4
 10-6 计算时间差 (04:09).mp4
 第11章 文件的输入输出 

14 节 | 125分钟 11-1 输入输出流 (10:27).mp4
 11-2 文件流的缓冲 (09:55).mp4
 11-3 读写一个字符 (06:46).mp4
 11-4 案例:复制文件-1 (09:28).mp4
 11-5 读写一行字符 (07:12).mp4
 11-6 案例:复制文件-2 (11:27).mp4
 11-7 读写指定大小的字节 (09:45).mp4
 11-8 案例:序列化和反序列化的基本实现 (11:24).mp4
 11-9 案例:复制文件-3 (06:29).mp4
 11-

10 格式化文本的输入输出 (03:31).mp4
 11-

11 案例:重定向标准输入输出流 (10:53).mp4
 11-

12 案例:统计文件字符个数 (08:38).mp4
 11-

13 输入输出流的位置 (08:19).mp4
 11-

14 其他常见的文件操作 (10:22).mp4
 第12章 线程与并发 

10 节 | 74分钟 12-1 线程的基本概念 (03:53).mp4
 12-2 线程的基本用法 (10:57).mp4
 12-3 资源的线程安全问题 (09:12).mp4
 12-4 volatile (03:51).mp4
 12-5 原子类型 (09:38).mp4
 12-6 锁 (05:42).mp4
 12-7 Thread Local (08:26).mp4
 12-8 副作用与纯函数 (03:05).mp4
 12-9 案例:处理复杂的线程返回结果 (05:34).mp4
 12-

10 案例:并发任务执行与函数回调 (12:44).mp4
 第13章 编译、链接和库 8 节 | 62分钟 13-1 可执行程序的编译过程 (09:06).mp4
 13-2 静态链接库的构建和使用 (06:12).mp4
 13-3 动态链接库的编译和使用 (05:32).mp4
 13-4 使用CMake完成库的编译和链接 (09:28).mp4
 13-5 使用 Conan 管理依赖 (14:40).mp4
 13-6 使用 C++ 调用 C 程序 (09:42).mp4
 13-7 使用Java调用C (06:56).mp4
 13-8 C 语言为什么可以成为编程语言的基础?.mp4
 第14章 GUI 编程实践 

10 节 | 132分钟 14-1 GUI开发概述【各平台GUI方案】 (03:51).mp4
 14-2 安装 GTK【安装GTK的各种问题解决】 (09:19).mp4
 14-3 编写第一个GTK程序 (16:42).mp4
 14-4 为GTK应用配置主题 (16:13).mp4
 14-5 使用 Xml 完成布局 (09:51).mp4
 14-6 使用 Glade 完成布局【提高布局开发效率的大招】 (17:00).mp4
 14-7 扩展:使用CSS调整控件样式 (15:03).mp4
 14-8 打包发布GTK程序 (13:09).mp4
 14-9 GTK的面向对象设计理念 (12:38).mp4
 14-

10 GTK的内存管理 (17:28).mp4
 第15章 综合案例:桌面跨平台高仿Mac版计算器 8 节 | 86分钟 15-1 案例效果展示 (03:22).mp4
 15-2 计算器核心模块接口设计 (12:20).mp4
 15-3 使用控制台调试计算器的输入输出 (08:22).mp4
 15-4 测试用例编写与单元测试 (10:31).mp4
 15-5 计算器核心逻辑实现-1 (09:02).mp4
 15-6 计算器核心逻辑实现-2 (11:38).mp4
 15-7 计算器UI布局开发 (09:14).mp4
 15-8 计算器UI逻辑接入及案例最终完整实现 (20:41).mp4
 第16章 综合案例:桌面跨平台的下载工具 

14 节 | 174分钟 16-1 案例基本功能及环境配置介绍 (14:06).mp4
 16-2 SQLite数据库引入及封装 (16:31).mp4
 16-3 实现对任务数据结构的增删改查 (06:08).mp4
 16-4 CURL的引入及下载逻辑的封装 (14:45).mp4
 16-5 文件名的解析及下载逻辑的验证 (20:44).mp4
 16-6 线程池的引入以及下载相关接口的封装 (15:41).mp4
 16-7 下载软件UI布局的介绍 (02:40).mp4
 16-8 实现下载任务的添加-1 (11:44).mp4
 16-9 实现下载任务的添加-2 (11:59).mp4
 16-

10 窗口内存泄漏的分析与解决 (08:02).mp4
 16-11 实现下载任务列表-1 (17:57).mp4
 16-12 实现下载任务列表-2 (10:53).mp4
 16-13 实现下载任务列表-3 (18:27).mp4
 16-

14 下载软件的功能演示 (04:11).mp4
 第17章 课程总结 2 节 | 7分钟 17-1 课程总结 (06:05).mp4
 17-2 为什么 C 语言没有统一的编译器实现?.mp4