C 语言的书林林总总,数不胜数,其中不乏《C Programming Language》 [1] 这样的Bible 级经典白皮书,也不乏《C 陷阱与缺陷》 [2] 、《C Programming FAQs》 [3] 这样的工程师枕边必备。中文教材方面也有《C 语言程序设计》 [4],[5] 这样广受学生们欢迎的教科书。所以任何再写C 语言书籍的作者,都要首先回答这样一个问题,为什么还需要这样一本书?
首先说明,这本书不是教材。任何教材都是“扁平”结构的,争取覆盖面广一些,同时每一部分又不是太深入,以免学生们被细节吓跑,同时也避免了一叶障目而不见森林。而本书最大的特点是在C 语言常用的若干知识点上做了深入探究。从这个意义上来说,它应该是一种“纵深”结构的。聪明的读者已经意识到,与这本书类似的那就是《C 陷阱与缺陷》 [2] ,这么理解也对,也不对。对的就是本书确实选取了C 语言的一些必备知识,相对来说,也是初学者容易搞不清楚、犯错误的知识点,做了深入地分析和介绍。不对的是这些知识点主要立足于教材中的内容,主要是对教材中没有进行详细解释的地方进行了补充式说明。你会发现,就连本书的顺序都与一般的教材相同。这些知识点也是我在教学过程中,我的学生们经常产生疑问或困惑的地方。坦白地说,这些知识点我也曾经困惑过,所以我猜在你学习的过程中也会有困惑。
同时,本书选取的主题,都是学习C 语言必备的知识点。对每一个知识点,又不太像《C 陷阱与缺陷》那样,一一列举出现错误的例子,给出阐释和警告;更多是从正面解析清楚知识点的原理,然后通过程序来解释剖析,真正做到讲解精炼,基本上一两个实例即可说明关键知识点。另外,对于数组、指针这样的关键章节,本书又不惜篇幅,讲解清楚。一些关键知识点讲解,引用到国外的经典著作,给读者很好的扩展阅读空间。通读并理解本书后,读者会更加深入地理解C 语言的机制和特点,也必将能够正确高效地使用C 语言进行编程。
本书另外一个特点就是语言轻松幽默,阅读和学习门槛相对较低,读者阅读和学习的时候不会觉得枯燥。本书的编辑读过之后,说这是本书的一个特色,其实主要是因为从小到大,大家总是笑话我,后来我想通了,决定写这本书,在你们笑的同时,多少我还能赚点钱:)。不瞒你说,我最大的理想就是:以后某个同学问学习C 语言用什么书时,大部分人都会对他说,“选某某教材,另外再加上赵岩的《C 语言点滴》。”
给书起个好名字,是一个比较难的事情,既要反映书的内容,还要给读者留下深刻的印象。原来准备将它叫作《C 语言神韵》,但是C 语言中没有任何东西是它独有的。很多其他的语言都或多或少地借鉴了它的语法和思想,例如C++、Java和Perl等。再说,如果C 语言是个女孩子,我也就是刚刚和人家认识,趁人不注意摸一下小手而已,这个时候妄谈什么神韵还太早了。如果以后能长久地相处下去,像Ritchie那样终身携手,那个时候,神韵才会慢慢显露出来。
灵感就在电光火闪之间,就叫做《C 语言点滴》吧。第一,本书并不是一个系统的教材,而是对某些知识点进行了分析,符合“点滴”这个语境。第二,C 语言是一个大海,本书的内容只是其中的几个小水滴,但是俗话说“滴水藏海”,如果读者能通过这些小水滴有所思考,并有所收获,将是作者最高兴的一件事。
本书面向各种层级的C 语言学习者。我这么说绝对不是为了增加读者的数量,说实话,你也不会因为读者对象不包含你就不去读这本书。你在18 岁以前,一定读过读者对象并不包含你的书,但你依然去读,原因很简单,因为你喜欢读。本书的面向对象确实有点广,这是由本书作者的经历决定的。作者曾经是一名C 语言的程序员,经历过溢出和越界的各种错误,所以本书中包含了各种工程的注意事项和编程技巧;同时,作者又在大学里面教授过C 语言,所以书中又有各种基础知识和原理的深入解释和介绍。可以说,本书面向读者覆盖了学生,又不单单是学生,甚至考虑到学生未来的学习和职业生涯。
虽然本书可以面向C 语言初级到高级的所有读者,但是不同的读者对象阅读的方法是不同的。如果你是初学者,是已经学习或正在学习C 语言的学生,不要把本书一口气读完,这样不仅无趣,还会把自己搞糊涂。在阅读本书的时候,你手中应该有一本教材。当你对教材中的某些地方不太明白,或者是实际编程的时候遇到了一些问题,而教材又没有给出相关的答案时候,这本书就是你最好的辅助教材。C 语言教学一直提倡“精讲多练”,这本书就是为了配合“精讲”而准备的。
如果你是C 语言的中级读者,一个高年级的学生或者已经是一个程序员,知道函数指针但是还不知道函数指针该用在什么地方,知道了数组和指针的关系,但是不知道如何定义一个指向二维数组的指针,这个时候,本书是一本重要的参考书。本书有针对这些问题的原理性介绍,同时,书中还有编程技巧方面的介绍,这对程序员也有很大的帮助。毕竟,我曾经也是一名程序员,也曾经在周末的时候,为了一个bug 而加班。我相信,当你阅读完本书后,你一定会写出更玄、更高效、让小师妹眼前一亮、心头一热的代码。
如果你是C 语言的高级读者,教授C 语言的老师,或是高级的程序员或项目经理,本书会让你进一步加深对C 语言的理解。另外,本书中推荐的一些扩展资料中也许会有你感兴趣的东西。如果你喜欢这本书,那就向别人介绍一下,如果你不喜欢本书,那就私下和我说说。如果有不同的理解或发现了错误,非常感谢你告诉我。
很明显,学习C 语言的主要目的就是成为一名专业的程序员。所以,本书第1、2章从程序员的角度,以轻松的笔触,介绍了编程方面的基本知识,包括常见的开发语言比较、开发平台、集成开发环境及源码管理工具等。希望读者在开拓视野的同时,在一个比较轻松的程序员文化氛围中,找到同感并引发进一步阅读的兴趣。
第3~13章,本书对C 语言中的重要知识点进行了系统而详细的介绍,根据学习C 语言的一般顺序,包含数据类型、表达式和控制结构、输入输出、函数和库函数、数组、指针、结构体、文件、错误和调试等,对主要知识点从原理和工程应用两个角度给予充分地介绍。本书尤其是对C 语言的两个重点和难点——指针,数组以及背后的关于内存的知识进行了重点和深入地讲解。
第14章是读者阅读完本书后的回顾,从效率入手,引入到继续学习的路径。总体来说,从学生进入校园到进入职场,从学习C 语言的Essential 知识,到后续的进阶,本书考虑得比较完整。
对于C 语言的初学者,不建议首先通读本书,而是在学习的过程中,带着相关问题,有的放矢地阅读本书;对于中高级程序员,可以在充分理解的情况下,通读本书。
本书所有源代码及C 语言关键字采用等宽字体进行排版。
本书的相关网站“http://www.hrbxinzhi.com/cbook/book.html”,提供了很多和本书内容相关的扩展资料。本书没有配套的光盘,所有的代码都不长,完全可以自己亲自敲进电脑。代码的长度并不重要,重要的是真正地理解代码要传达的思想,并能够在日后践行这些思想。
如果要在课堂上使用本书,可以在乐学网上下载我教授C 语言所用的课程课件,输入http://cms.hit.edu.cn/course/view.php?id=100 网址后,在出现的页面中猛击“随便看看”就可以了。我的课程不需要注册,可以通过访客的身份来浏览和下载。整个课件可以与本书在C 语言教学中搭配使用。
对本书的任何反馈都可以通过zhaoyan.hrb@gmail.com 发送给我,我非常感谢你们宝贵的意见。
首先我要感谢C 语言的创始人之一,丹尼斯·里奇(Dennis Ritchie)。在我写这本书的时候,他于2011 年10 月9 日逝世。没有他,就没有C 语言,也就没有这本书。正所谓饮水思源,所以我写下了下面的程序来纪念这位大师。
/* 纪念大师 */
1 #include<stdio.h>
2 int main(){
3 printf("Goodbye, World!\n");
4 return 0;
5 }
他最开始出于兴趣,开发了UNIX 系统并发明了C 语言,这两个成就足以彪炳史册。他再一次证明了IT 领域中的重大创新基本上都是来源于天才的兴趣,既不是来源于大把大把地烧钱,更不是来源于行政命令造成的大跃进。
写这本书的同时,我还在哈尔滨工业大学软件学院教授C 语言。下图中显示了我的学生在QQ 上给予我的印象,以及通过教务处网站匿名给我的评教结果和评语。在2010 年我的评教结果为A,2011 年度又获得了全学院唯一一个A+。
我非常感谢这些优秀的学生,他们对我的教学工作给予了很高的评价。学生们的评价给予了我信心;同时,他们各种古怪的问题和聪明的发现给予了我很多灵感,所有这些,最终促使我下定决心,写一本关于C 语言方面的书,帮助同学们克服学习C 语言中常见的困难。教学是件天底下最有趣的事情,不仅可以传授知识,还可以促使你不断地进步。因为如果你不与时俱进,虽然你可以看到学生们在课堂上频频点头,但是他们一定是在打盹儿。
我还要感谢出版社方面的朋友。和出版社的朋友合作是一件令人愉快的事情,正是有了他们的帮助,本书才能顺利出版。你可能像我一样,不认识陈冀康这个人,就像你不认识沃兹尼克这个人一样。但是如果我说,沃兹尼克,而不是乔布斯,开发了第一台苹果电脑,我相信你会记住沃兹尼克;与此类似,陈冀康编辑,主持翻译、引进、出版了《C 陷阱与缺陷》、《C 和指针》和《C 专家编程》这三本工程师宝典级别的书籍。这个世界上总有一些幕后英雄,他们在默默做一些貌似平凡、实则伟大的事情。当我收到了陈编辑长长的回信,并且同意尽快出版本书的时候,我知道,我成功了!
最后我要感谢我的父母及家人,你们对我生活上的帮助和照顾,对我非常重要。感谢我两周岁的女儿Millie(米粒)。如果没有她,这本书两年前就应该已经写完了!不过质量一定没有现在好:)在我写书的这段时间,她既长了重量,也长了个头,不过长的最多的还是脾气。我的妻子在我写书的过程中,不仅一次地凑过来打听:“这本书你要献给谁啊?”我一直都没有反应过来,倒不是因为我笨,而是我一直认为,我没必要把书献给她,这本书就像Millie,本身就是属于我们俩的!
赵岩 写于2012年12月