这玩意儿跟现在那些花里胡哨的语言不一样,它不惯着你,一点儿也不。它就像个不苟言笑的老教头,手里拿着戒尺,你敢不敬,一尺子就抽过来——一个段错误(Segmentation fault)直接让你怀疑人生。但你一旦把它伺候明白了,那感觉,嘿,就像打通了任督二脉,看什么都通透了。
所以,聊书单这事儿,不能像超市货架一样给你罗列一堆。得有个路径,有个章法,不然你走两步就得迷失在指针的丛林里。

第一关:入门,或者说,别被劝退
无数人倒在 C 语言的门口,为什么?上来就啃最硬的骨头。我跟你说,直接啃 K&R 的新手,我敬你是条汉子,但九成九要被劝退。
所以,我的建议是,从“保姆”开始。
《C Primer Plus》
这本书,就是那个耐心的、手把手教你走路的保姆。它厚,非常厚,厚得像块砖头。但你别怕,它的厚,是因为它把每一个知识点都掰开揉碎了,生怕你噎着。变量是什么,循环怎么写,函数怎么调用……它会用大量的例子,甚至有点啰嗦的比喻,让你建立起最初的画面感。
很多人鄙视这本书,觉得它不够“正宗”,太慢了。放屁。对于一张白纸来说,建立正反馈比什么都重要。你照着它敲代码,能跑通,能看到结果,这种最原始的快乐,是支撑你走下去的唯一燃料。这本书就是给你加燃料的。别管别人怎么说,先把这本书从头到尾,连练习题带代码,踏踏实实地过一遍。这是你的“新手村”。
第二关:朝圣,见识一下真正的神
在新手村练得差不多了,是时候去拜见祖师爷了。这时候,那本传说中的“圣经”就可以请出来了。
《The C Programming Language》(通常说的 K&R)
这书,薄薄的一本,字里行间透着一股子冷峻和优雅。它不是写给菜鸟看的,它默认你已经是个“准程序员”了。它的每一个例子,每一个函数,都精炼到了极致,多一个字都嫌累赘。
读 K&R 的感觉很奇妙。它不会像《C Primer Plus》那样给你解释“为什么”,它更多的是在“展示”。看,代码就该这么写。简洁、高效、直指核心。这是一种编程审美的熏陶。你读它,不是为了学语法,语法你早就知道了。你是为了学思想,学那种属于 C 语言的、贴近硬件的、不拖泥带水的思维方式。
这本书,要反复读。第一遍可能云里雾里,第二遍有点感觉,第三遍、第四遍……你每次在实际工作中踩了坑,再回来看它,都会有“哦,原来是这样!”的顿悟。它就是 C 语言的《道德经》,常看常新。
第三关:降妖,直面那头叫“指针”的猛兽
如果说 C 语言有灵魂,那毫无疑问就是指针。这也是劝退率最高的地方,是无数英雄好汉折戟沉沙的修罗场。指针玩不明白,你永远也别说自己懂 C。
这时候,你需要一本专门的“降魔宝典”。
《C和指针》(Pointers on C)
这本书的名字就告诉你了,它的核心就是干指针的。它会把指针的方方面面,从最基础的地址概念,到指针数组、数组指针、函数指针、指向指针的指针……这些光听名字就能让人原地爆炸的概念,给你讲得明明白白。
它最牛的地方在于,它有大量的图解。它会画出内存布局,告诉你这个指针指向了哪里,那个指针又改变了什么。这种可视化的讲解,对于理解指针这种抽象的东西,简直是救命稻草。你跟着它的图,一步步在纸上画,慢慢地,你脑子里就能建立起一个清晰的内存模型。当这个模型在你脑中成型时,指针在你眼里就不再是鬼魅,而是一个个听话的工具。
把这本书啃透了,指针这头猛兽,就算是被你彻底驯服了。
第四关:飞升,从“会用”到“精通”
当你能熟练地使用 C 语言写出功能,并且把指针玩得溜溜转的时候,恭喜你,你已经是个合格的 C 程序员了。但想成为高手,还差得远。你需要知道那些藏在语言犄角旮旯里的“骚操作”和“史前巨坑”。
《C专家编程》(Expert C Programming)
别被“专家”两个字吓到。这本书其实非常有趣,读起来像是在听一个硅谷老炮儿吹牛逼。他会给你讲很多 C 语言的历史、八卦、设计哲学,以及各种匪夷所思的语法细节。
你知道 a[i]
其实等价于 i[a]
吗?你知道 typedef
和 #define
的深层区别吗?你知道链接器是怎么工作的吗?这本书里全是这些东西。它不会教你怎么写 for
循环,它教的是那些能让你在同事面前瞬间提升逼格的知识。更重要的是,理解了这些,你才能真正理解 C 语言为什么是现在这个样子,才能在遇到诡异的 bug 时,不只是抓瞎,而是能从语言设计的根源去思考问题。
《C缺陷与陷阱》(C Traps and Pitfalls)
这本跟《C专家编程》是绝配。如果说前者是屠龙宝刀,那这本就是一本“排雷手册”。它很薄,一个下午就能看完。但里面总结的,全是前人血和泪的教训。
=
和 ==
的误用、优先级问题、宏的副作用、内存泄漏的常见场景……它就像一个经验丰富的老兵,告诉你战场上哪里埋了地雷。你看完这本书,可能不会让你代码写得更快,但绝对能让你写的代码更安全、更少出问题。很多时候,写出没有 bug 的代码,比写出功能本身更重要。
终极关卡:破壁,看见代码之外的世界
到了这一步,你对 C 语言本身已经了如指掌。但你很快会发现一个新的瓶颈:你的代码运行在操作系统之上,跑在 CPU 之中。你不懂它们,你的 C 语言功力就永远隔着一层毛玻璃。
《深入理解计算机系统》(CSAPP)
这本书,就是那把砸开毛玻璃的锤子。它不是一本纯粹的 C 语言书,但它通篇都在用 C 语言作为工具,去解剖整个计算机系统。
从数据在计算机内部的表示,到汇编语言,到存储器层次结构,到链接、进程、虚拟内存……它会把你写的每一行 C 代码,最终是如何在真实的物理机器上变成电信号跑起来的,这个过程给你讲得一清二楚。
学完这本书,你再看 int a = 1;
,你看到的就不再是一行代码,而是编译器如何在栈上分配了4个字节,如何把立即数 0x00000001
放进去。你再看到 malloc
,你看到的就不再是一个函数,而是操作系统在堆区进行的一系列复杂操作。
这个过程,我称之为“开天眼”。从此,C 语言在你手中不再仅仅是一门语言,而是你与计算机硬件直接对话的权杖。
这条路不好走,但走通了,你看到的世界,真的不一样。
本文由用户 好好学习 上传分享,若内容存在侵权,请联系我们(点这里联系)处理。如若转载,请注明出处:http://www.365yunshebao.com/book/6641.html