c.md 11.2 KB
Newer Older
沉默王二's avatar
沉默王二 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
---
star: true
title: 2022最新超详细C语言学习路线(建议收藏🔥)
shortTitle: C语言学习路线
category:
  - 学习路线
tag:
  - C语言
  - C语言学习路线
description: 写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处。
head:
  - - meta
    - name: description
      content: 写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处。
  - - meta
    - name: keywords
      content: C语言,C语言学习路线
---


我花时间写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处。

我们先从 C 语言的入门开始,总共**一本书,两门视频课**

### 01)阮一峰老师的 C语言入门教程

阮一峰老师的 C语言入门课,我第一时间就拜读了一遍,受益匪浅!可以说目前我见到的最好的 C语言入门教程了,没有之一!国内的绝大多数高校,大一都会安排 C 语言这门课,阮一峰了老师的这份《C语言入门教程》,绝对是福音。

我第一时间就整理了一份 PDF 版,截个图大家可以感受下。我对这份教程非常满意,该讲的地方都讲到了,示例也给了很多,对初学者来说,入门必备。

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-1.png)

直接长按识别/扫描下方二维码,关注后回复 「**08**」 下载这份 PDF 吧:

![扫码关注后回复「08」关键字](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)



### 02)翁恺教授的C语言视频课

可以先看阮一峰老师的《C语言入门教程》,也可以先花一个月的时间,去 mooc 把《程序设计入门 C语言》这门视频课过一遍。

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-2.png)

>视频地址:[https://www.icourse163.org/course/ZJU-199001](https://www.icourse163.org/course/ZJU-199001)

看完这套视频,大家至少能学到:

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-3.jpg)


学完这门入门课后,可以再看一下进阶版的。课程以一个 Windows 下的图形游戏程序入手,借助一个 C 语言图形库,展开全部的教学内容,非常有趣。

>视频地址:[https://www.icourse163.org/course/ZJU-200001](https://www.icourse163.org/course/ZJU-200001)

这里给大家一点看视频的小建议哈。

老老实实听课,做笔记,严格按照翁恺老师的要求完成作业。如果还有余力,那么考虑一下课后的思考题。如果没有思路,先看一下别人的讨论,然后渐渐学会自己总结。

**没有学不会的 C 语言,只有不对的学习姿势**


### 03)为什么要学习 C语言?

很多初学者会感到困惑,C 语言既然工作岗位不多,为什么还要学习呢?学习 C语言能做什么?如果这两个问题搞不清楚的话,学习的过程中就容易脱靶。

C语言是由贝尔实验室的 Dennis Ritchie 在 1969 年~ 1973 年间发明创造的。

![C语言之父](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-1.jpg)

Dennis Ritchie是这样评价自己的亲儿子的:“**古怪的、有缺陷的,但同时也是一个巨大的成功**。”这句评语还是非常中肯的。

**第一,C语言在计算机领域起到了承上启下的作用**

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-4.jpg)

C语言非常的简洁,几乎没有任何冗余。上手难度几乎为 0,除了指针难以被新手掌握以外,其他的基础语法都很容易上手。很多编程语言都受到了C语言的影响,比如说 Java、C++、C#、Python、Go 等等,那学会了 C语言,再学习其他的编程语言就会丝滑得多。

另外,大部分 Unix 内核,以及所有支撑工具和函数库都是用 C语言来编写的。以至于后来几乎所有的操作系统内核都用到了C语言,比如说 Windows、Linux、macOS 等等。那学会了 C语言,就可以学习计算机组成原理、操作系统等等偏基础的计算机基础知识。

《指环王》里有这样一句话:“one ring to them all”,可以把 ring 换成 language,这个 language 就是C语言。


**第二,C语言可以用于嵌入式系统的开发**

除了用于计算机操作系统的编写,C语言现在主要用于嵌入式系统的开发,汽车、照相机、家用电器等设备的底层系统都是用 C 语言编写的。

C语言能够直接操作硬件、管理内存、跟操作系统交互,这使得它成为了一种非常接近底层的编程语言,非常适合有极高性能要求的程序。

![MATLAB+C语言来控制机械臂](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-2.jpg)


**04)C语言核心知识点汇总**

为了方便大家的学习,我这里汇总一下 C语言的核心知识点。先来看文字版的:

- 数据类型
- 运算符和表达式
- 输入和输出
- 流程控制
- 函数
- 数组
- 指针
- 结构体
- 文件操作
- 内存管理

再来看详细版的思维导图:


![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-5.png)


C语言有两个关键部分:

第一是语法:也是入门教材里最看重的内容,也就是那些变量、数据类型、分支判断、循环、函数、指针等等。

第二是函数库:简单来说,函数库就是别人编写好的 C 函数,你可以直接拿来调用,比如说调用 `printf()` 函数就可以在屏幕上打印。很多人可能觉得库函数不重要,都是别人封装好的,只要记住函数名就可以了,但其实我想表达的是,库函数才是你学习 C语言并将其应用于实践的关键。

因为学会调用别人的库函数(例如malloc函数、calloc函数、realloc函数、free函数),才有机会写出自己的库函数,否则从零开始撸实在是太不现实了。


**05)学习 C语言的一些建议**

一般来说,学习 C语言可以分为以下 5 个阶段:

- 1)学习基础语法
- 2)学会使用 C语言自带的库函数,比如说 printf 级别的
- 3)学会使用一些基本的数据结构与算法
- 4)有了一定的 C语言基础,开始学习一些计算机专业的核心知识,比如说操作系统、计算机组成原理等
- 5)动手做出一些 lab,造一些简单的轮子,实现一些简单的小应用

这里推荐 2 个蓝桥云课上的免费小 lab,大家可以动手练起来。

**1)可以进行加减乘除的计算器**

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-6.jpg)

>课程地址:[https://www.lanqiao.cn/courses/75](https://www.lanqiao.cn/courses/75)


通过这个 lab,大家可以学到:

* 计算器设计思路
* C 语言的格式检查
* C 语言输入与输出


**2)实现一个属于自己的编程语言**


![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-7.png)


>课程地址:[https://www.shiyanlou.com/courses/670](https://www.shiyanlou.com/courses/670)

通过这个 lab,大家可以学到:

* 解析器
* 波兰表达式
* 解析树的计算
* S-Expression
* 变量定义和使用
* 条件判断
* 正则表达式
* 递归分析长字符串
* 出错处理
* Q-Expression
* 函数
* 字符串

这个 lab 翻译自国外的 build your own lisp:

>[https://buildyourownlisp.com/](https://buildyourownlisp.com/)

如果英语功底比较扎实的话,可以直接看原版。

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-8.png)


认真跟着做这些 lab,真本领就学到手了。

**06)学习 C语言的其他资源**

给初中生看的《啊哈 C语言》,简单易懂,生动有趣,虽然只能学到 C语言的冰山一角,但也值了。

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-9.png)


给高中生、大一新生看的入门书《c primer plus》,语法全覆盖,细节多,知识点讲的清楚,缺点是琐碎,细节弯弯绕。


![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-10.png)


还有一本《C 程序设计语言》,这本书的作者是 C语言之父,所以全书讲的都是 C语言的核心。代码示例大多都是库函数的实现方法,内容简洁明了,干净利落,没有废话。

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-11.png)



- 想成为大佬的人
- 想进阶 C语言
- 想理解指针和内存
- 想搞懂 Linux 内核
- 想搞基础设备的
- 想搞单片机的
- 想进微软改进 Windows 的
- 想搞贴近生活硬件的,比如说闹钟、计时器、简单的机器人

看的进阶书《C 陷阱与缺陷》、《C 专家编程》、《C 和指针》

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-12.png)

尽管我不推荐大家看书入门,但我知道很多读者还是喜欢通过看书的方式学习。直接长按扫描下方二维码,关注后回复 「**C**」 下载这 PDF 版吧:

![(长按扫码识别)](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongzhonghao.png)


更多 C语言的学习资料,可以直接戳我整理的这个 GitHub/码云仓库——📚程序员必读书单整理,附下载地址,里面有大量的 C语言学习资料。

- GitHub 地址:[https://github.com/itwanger/JavaBooks](https://github.com/itwanger/JavaBooks#c)
- 码云地址:[https://gitee.com/itwanger/JavaBooks](https://gitee.com/itwanger/JavaBooks#c)

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexiluxian/c-books.jpg)

简单罗列一下:

- 深度探索C  对象模型
- 数据结构与算法分析--C语言描述
- C Primer Plus(第五版) 
- C程序设计语言(第二版,中文版)
- C和指针
- C陷阱与缺陷
- C专家编程

-------

到此为止,C语言的重点就全部划出来了,剩下的学习就交给大家了。最后,二哥再唠叨几句:

1、自学才是硬道理。强大的自学能力是独自解决问题的根本,程序员需要拥有强大的自学能力。

2、一个人可以走得很快,但一群人才能走的更远。最好加入一些有氛围的技术交流群,结交一两个有能力的同阶段的人,切磋精进一下。

3、入门阶段,coding 为主,视频为辅,不要搞反了。记住这个公式:只看+不练=假把戏。

4、如果以后不想当一个优秀的工程师,不想在计算机这条道路上走得更远,只想躺平当个平平淡淡的码农,那么我推荐一条路:跟着老师一步步走,跟着大学的教学方案,一步步走就行了。

上面这4条建议其实不仅适用于C语言的学习,还适用于其他任何一门编程语言的学习。如果能够这样坚持下去,几年后,你将是一名善于解决实际问题的工程师,而不是一名普普通通的码农。

以上,希望能帮助到大家!

*没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟*


![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xingbiaogongzhonghao.png)