|
| 1 | +我花时间写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处。 |
| 2 | + |
| 3 | +我们先从 C 语言的入门开始,总共**一本书,两门视频课**。 |
| 4 | + |
| 5 | +### 01)阮一峰老师的 C语言入门教程 |
| 6 | + |
| 7 | +阮一峰老师的 C语言入门课,我第一时间就拜读了一遍,受益匪浅!可以说目前我见到的最好的 C语言入门教程了,没有之一!国内的绝大多数高校,大一都会安排 C 语言这门课,阮一峰了老师的这份《C语言入门教程》,绝对是福音。 |
| 8 | + |
| 9 | +我第一时间就整理了一份 PDF 版,截个图大家可以感受下。我对这份教程非常满意,该讲的地方都讲到了,示例也给了很多,对初学者来说,入门必备。 |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | +直接长按扫描下方二维码,关注后回复 「**C语言**」 下载这份 PDF 吧: |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | + |
| 18 | + |
| 19 | +### 02)翁恺教授的C语言视频课 |
| 20 | + |
| 21 | +可以先看阮一峰老师的《C语言入门教程》,也可以先花一个月的时间,去 mooc 把《程序设计入门 C语言》这门视频课过一遍。 |
| 22 | + |
| 23 | + |
| 24 | + |
| 25 | +>视频地址:https://www.icourse163.org/course/ZJU-199001 |
| 26 | +
|
| 27 | +看完这套视频,大家至少能学到: |
| 28 | + |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +学完这门入门课后,可以再看一下进阶版的。课程以一个 Windows 下的图形游戏程序入手,借助一个 C 语言图形库,展开全部的教学内容,非常有趣。 |
| 33 | + |
| 34 | +>视频地址:https://www.icourse163.org/course/ZJU-200001 |
| 35 | +
|
| 36 | +这里给大家一点看视频的小建议哈。 |
| 37 | + |
| 38 | +老老实实听课,做笔记,严格按照翁恺老师的要求完成作业。如果还有余力,那么考虑一下课后的思考题。如果没有思路,先看一下别人的讨论,然后渐渐学会自己总结。 |
| 39 | + |
| 40 | +**没有学不会的 C 语言,只有不对的学习姿势**。 |
| 41 | + |
| 42 | + |
| 43 | +### 03)为什么要学习 C语言? |
| 44 | + |
| 45 | +很多初学者会感到困惑,C 语言既然工作岗位不多,为什么还要学习呢?学习 C语言能做什么?如果这两个问题搞不清楚的话,学习的过程中就容易脱靶。 |
| 46 | + |
| 47 | +C语言是由贝尔实验室的 Dennis Ritchie 在 1969 年~ 1973 年间发明创造的。 |
| 48 | + |
| 49 | + |
| 50 | + |
| 51 | +Dennis Ritchie是这样评价自己的亲儿子的:“**古怪的、有缺陷的,但同时也是一个巨大的成功**。”这句评语还是非常中肯的。 |
| 52 | + |
| 53 | +**第一,C语言在计算机领域起到了承上启下的作用**。 |
| 54 | + |
| 55 | + |
| 56 | + |
| 57 | +C语言非常的简洁,几乎没有任何冗余。上手难度几乎为 0,除了指针难以被新手掌握以外,其他的基础语法都很容易上手。很多编程语言都受到了C语言的影响,比如说 Java、C++、C#、Python、Go 等等,那学会了 C语言,再学习其他的编程语言就会丝滑得多。 |
| 58 | + |
| 59 | +另外,大部分 Unix 内核,以及所有支撑工具和函数库都是用 C语言来编写的。以至于后来几乎所有的操作系统内核都用到了C语言,比如说 Windows、Linux、macOS 等等。那学会了 C语言,就可以学习计算机组成原理、操作系统等等偏基础的计算机基础知识。 |
| 60 | + |
| 61 | +《指环王》里有这样一句话:“one ring to them all”,可以把 ring 换成 language,这个 language 就是C语言。 |
| 62 | + |
| 63 | + |
| 64 | +**第二,C语言可以用于嵌入式系统的开发** |
| 65 | + |
| 66 | +除了用于计算机操作系统的编写,C语言现在主要用于嵌入式系统的开发,汽车、照相机、家用电器等设备的底层系统都是用 C 语言编写的。 |
| 67 | + |
| 68 | +C语言能够直接操作硬件、管理内存、跟操作系统交互,这使得它成为了一种非常接近底层的编程语言,非常适合有极高性能要求的程序。 |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | +**04)C语言核心知识点汇总** |
| 74 | + |
| 75 | +为了方便大家的学习,我这里汇总一下 C语言的核心知识点。先来看文字版的: |
| 76 | + |
| 77 | +- 数据类型 |
| 78 | +- 运算符和表达式 |
| 79 | +- 输入和输出 |
| 80 | +- 流程控制 |
| 81 | +- 函数 |
| 82 | +- 数组 |
| 83 | +- 指针 |
| 84 | +- 结构体 |
| 85 | +- 文件操作 |
| 86 | +- 内存管理 |
| 87 | + |
| 88 | +再来看详细版的思维导图: |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | +C语言有两个关键部分: |
| 95 | + |
| 96 | +第一是语法:也是入门教材里最看重的内容,也就是那些变量、数据类型、分支判断、循环、函数、指针等等。 |
| 97 | + |
| 98 | +第二是函数库:简单来说,函数库就是别人编写好的 C 函数,你可以直接拿来调用,比如说调用 `printf()` 函数就可以在屏幕上打印。很多人可能觉得库函数不重要,都是别人封装好的,只要记住函数名就可以了,但其实我想表达的是,库函数才是你学习 C语言并将其应用于实践的关键。 |
| 99 | + |
| 100 | +因为学会调用别人的库函数(例如malloc函数、calloc函数、realloc函数、free函数),才有机会写出自己的库函数,否则从零开始撸实在是太不现实了。 |
| 101 | + |
| 102 | + |
| 103 | +**05)学习 C语言的一些建议** |
| 104 | + |
| 105 | +一般来说,学习 C语言可以分为以下 5 个阶段: |
| 106 | + |
| 107 | +- 1)学习基础语法 |
| 108 | +- 2)学会使用 C语言自带的库函数,比如说 printf 级别的 |
| 109 | +- 3)学会使用一些基本的数据结构与算法 |
| 110 | +- 4)有了一定的 C语言基础,开始学习一些计算机专业的核心知识,比如说操作系统、计算机组成原理等 |
| 111 | +- 5)动手做出一些 lab,造一些简单的轮子,实现一些简单的小应用 |
| 112 | + |
| 113 | +这里推荐 2 个蓝桥云课上的免费小 lab,大家可以动手练起来。 |
| 114 | + |
| 115 | +**1)可以进行加减乘除的计算器** |
| 116 | + |
| 117 | + |
| 118 | + |
| 119 | +>课程地址:https://www.lanqiao.cn/courses/75 |
| 120 | +
|
| 121 | + |
| 122 | +通过这个 lab,大家可以学到: |
| 123 | + |
| 124 | +* 计算器设计思路 |
| 125 | +* C 语言的格式检查 |
| 126 | +* C 语言输入与输出 |
| 127 | + |
| 128 | + |
| 129 | +**2)实现一个属于自己的编程语言** |
| 130 | + |
| 131 | + |
| 132 | + |
| 133 | + |
| 134 | + |
| 135 | +>课程地址:https://www.shiyanlou.com/courses/670 |
| 136 | +
|
| 137 | +通过这个 lab,大家可以学到: |
| 138 | + |
| 139 | +* 解析器 |
| 140 | +* 波兰表达式 |
| 141 | +* 解析树的计算 |
| 142 | +* S-Expression |
| 143 | +* 变量定义和使用 |
| 144 | +* 条件判断 |
| 145 | +* 正则表达式 |
| 146 | +* 递归分析长字符串 |
| 147 | +* 出错处理 |
| 148 | +* Q-Expression |
| 149 | +* 函数 |
| 150 | +* 字符串 |
| 151 | + |
| 152 | +这个 lab 翻译自国外的 build your own lisp: |
| 153 | + |
| 154 | +>https://buildyourownlisp.com/ |
| 155 | +
|
| 156 | +如果英语功底比较扎实的话,可以直接看原版。 |
| 157 | + |
| 158 | + |
| 159 | + |
| 160 | + |
| 161 | +认真跟着做这些 lab,真本领就学到手了。 |
| 162 | + |
| 163 | +**06)学习 C语言的其他资源** |
| 164 | + |
| 165 | +给初中生看的《啊哈 C语言》,简单易懂,生动有趣,虽然只能学到 C语言的冰山一角,但也值了。 |
| 166 | + |
| 167 | + |
| 168 | + |
| 169 | + |
| 170 | +给高中生、大一新生看的入门书《c primer plus》,语法全覆盖,细节多,知识点讲的清楚,缺点是琐碎,细节弯弯绕。 |
| 171 | + |
| 172 | + |
| 173 | + |
| 174 | + |
| 175 | + |
| 176 | +还有一本《C 程序设计语言》,这本书的作者是 C语言之父,所以全书讲的都是 C语言的核心。代码示例大多都是库函数的实现方法,内容简洁明了,干净利落,没有废话。 |
| 177 | + |
| 178 | + |
| 179 | + |
| 180 | + |
| 181 | +给 |
| 182 | +- 想成为大佬的人 |
| 183 | +- 想进阶 C语言 |
| 184 | +- 想理解指针和内存 |
| 185 | +- 想搞懂 Linux 内核 |
| 186 | +- 想搞基础设备的 |
| 187 | +- 想搞单片机的 |
| 188 | +- 想进微软改进 Windows 的 |
| 189 | +- 想搞贴近生活硬件的,比如说闹钟、计时器、简单的机器人 |
| 190 | + |
| 191 | +看的进阶书《C 陷阱与缺陷》、《C 专家编程》、《C 和指针》 |
| 192 | + |
| 193 | + |
| 194 | + |
| 195 | +尽管我不推荐大家看书入门,但我知道很多读者还是喜欢通过看书的方式学习。直接长按扫描下方二维码,关注后回复 「**C语言**」 下载这 PDF 版吧: |
| 196 | + |
| 197 | + |
| 198 | + |
| 199 | +------- |
| 200 | + |
| 201 | +到此为止,C语言的重点就全部划出来了,剩下的学习就交给大家了。最后,二哥再唠叨几句: |
| 202 | + |
| 203 | +1、自学才是硬道理。强大的自学能力是独自解决问题的根本,程序员需要拥有强大的自学能力。 |
| 204 | + |
| 205 | +2、一个人可以走得很快,但一群人才能走的更远。最好加入一些有氛围的技术交流群,结交一两个有能力的同阶段的人,切磋精进一下。 |
| 206 | + |
| 207 | +3、入门阶段,coding 为主,视频为辅,不要搞反了。记住这个公式:只看+不练=假把戏。 |
| 208 | + |
| 209 | +4、如果以后不想当一个优秀的工程师,不想在计算机这条道路上走得更远,只想躺平当个平平淡淡的码农,那么我推荐一条路:跟着老师一步步走,跟着大学的教学方案,一步步走就行了。 |
| 210 | + |
| 211 | +上面这4条建议其实不仅适用于C语言的学习,还适用于其他任何一门编程语言的学习。如果能够这样坚持下去,几年后,你将是一名善于解决实际问题的工程师,而不是一名普普通通的码农。 |
| 212 | + |
| 213 | +以上,希望能帮助到大家! |
| 214 | + |
| 215 | + |
| 216 | + |
| 217 | +*没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟*。 |
| 218 | + |
| 219 | + |
| 220 | + |
| 221 | + |
| 222 | + |
| 223 | + |
| 224 | + |
0 commit comments