干货 | 如何系统学习 C 语言?
时间:2021-08-19 16:28:22
手机看文章
扫描二维码
随时随地手机看文章
[导读]关注、星标公众号,直达精彩内容C语言应该是绝大部分同学的编程第一课。对于非CS专业的同学,学C语言主要是掌握一些基本的编程方法,C语言只是媒介。但是对于CS科班的同学,C语言是后续的计组、体系结构、操作系统、编译原理等课程的基石,对于C语言本身甚至程序设计语言基础原理的深入理解都...
关注、星标公众号,直达精彩内容
- C 语言应该是绝大部分同学的编程第一课。
- 对于非 CS 专业的同学,学 C 语言主要是掌握一些基本的编程方法,C 语言只是媒介。
- 但是对于 CS 科班的同学,C 语言是后续的计组、体系结构、操作系统、编译原理等课程的基石,对于 C 语言本身甚至程序设计语言基础原理的深入理解都是应该掌握的。
一、一图胜千言
如果你不想看冗余的文字,直接看我画的这个思维导图即可:二、C 语言易学难精?
很多同学都反映 C 语言难。实际上,相比 C 、Java 之类的更加现代的语言, C 语言本身的语法特性非常少,不像 C 成了一锅大杂烩。C 语言本身只包含了编程语言最基本的语法,比如变量、if、else、for、while、枚举、结构体等,外加一个指针。但是为什么大家都觉得难呢?说下我大一时觉得难的原因吧,主要两点:1. 库太少,太原始用 C 语言写个稍微复杂点的项目,你需要上来先把数据结构、常见算法先实现一遍,更别说字符串,序列化这些了。比如 Redis 里 SDS、LIST、ZSET、HASH等。这其实对新手极其的不友好。想做点有趣的东西,来,先写个链表?而在 Java 里直接 New 一个 LinkedLits、HashMap,简直不要太高效。再到后来,学了 Python,才发现这才是编程的高级形态,写个爬虫直接 import xx,几句话就完事了。而在 C 语言里,你需要裸写 Socket 发网络包,还要解析 HTTP 协议,还要序列化 JSON,处理 HTTPS 这些(当然,你也可以导入库,但是由于 C/C 弱鸡等同于没有的包管理,也挺麻烦的。这就是新手学 C 容易被劝退的原因,做不出好玩的东西,全是一堆黑框框。2. 内存、指针另外,常另 C 语言初学者感到头疼的就是指针了。指针其实本身不难,就是变量的地址嘛。但是问题在于地址是个什么东西?理解地址,就需要理解内存,但是鉴于大多数同学学习 C 语言,都是在大一,那时候没有计算机基础知识,其实理解起来还是稍微吃力的。内存,其实也很简单啊,你就把它当做一个黑盒,提供了读和写的能力。就像快递柜一样,提供了存东西、放东西的能力:读哪里?写哪里?当然是需要地址啊,地址就跟快递柜上的编号一样,而快递柜格子里就相对于内存中真正存放的内容。记住这张快递柜的照片,其实指针你就理解了。什么是二级指针?就是快递柜格子里放的是另外一个格子的编号,对应到 C 语言举个例子:int a = 10;
int *pa =