前言
这是一本关于 C 语言的数组和指针的书。
可能有很多人感到纳闷:“都什么年代了,还出版 C 语言的书。”
C 语言确实是非常陈旧的语言。去书店逛逛就会看到,C 语言的书铺天盖地,其中跟本书一样专门讲解指针的书也有很多。同类书一本接一本地出版,也恰好证明 C 指针多么难掌握。事实上,上网一搜就会看到,“C 指针好难啊”的抱怨比比皆是。
那些为 C 指针感到苦恼的读者,请听我一言:
理解不了 C 指针不是你的错,是 C 语言的语法太坑人了,仅此而已!
特别是 C 语言中有关声明的语法,实在是太奇葩了。既然是奇葩,那就要把它当作奇葩来理解。但是,充斥在书店里的那些 C 语言书,即便是专门讲解指针的,也没有一本正面指出过这一点。
我也曾对数组和指针的相关语法感到非常纠结。
而我写本书 2 的初衷,就是希望和我一样曾为 C 指针感到苦恼的人,在阅读本书时,能够发自内心地感慨:“要是那个时候上天能让我遇见这样一本书,那该多好呀!”
2这里是指本书第 1 版,原版于 2001 年出版,中文版由人民邮电出版社于 2013 年 2 月出版。——编者注
然而,本书第 1 版是 2001 年发行的,距今已将近 17 年 3。虽说 C 语言是古老的(成熟的)语言,变化很慢,但毕竟已经过去 17 年了,围绕 C 语言的大环境多少还是有些变化的。2001 年,刚刚制定不久的 ISO-C99 还没有完全替代原来的 C 语言标准,但如今已经拥有了相当数量的使用者。2011 年,新的标准 C11 也发布了。同时,计算机也在不断发展,64 位操作系统已成为主流。另外,随着互联网的普及,安全问题也日益突出。
3这里是指原书第 1 版距原书第 2 版上市(2017 年 12 月)的时间。——编者注
针对这些变化,第 2 版相应地对内容进行了修订。
目前市面上的 C 语言入门书,在讲解指针时往往使用一些非常教科书式的生硬例子来说明。看多了这些例子,初学者多半会问:“为什么非得要指针这种东西呀?”
然而,在 C 语言编程中,是不可能避开指针的。实际上,现实世界里所用的程序也确实运用了指针。
除了 C 语言(奇葩的)语法之外,本书还会对指针的实用方法进行说明。
在阅读本书的过程中,请注意以下几点。
本书的读者定位虽然是“在学习 C 语言的过程中,在学到指针部分时遇到了困难”的人,但本书中也不乏一些高难度的内容。
特别是对于初学者来说,不用非得从头开始按顺序阅读,不完全弄清楚就不往下继续。在遇到不太明白的地方时,不要过分纠结,先读下去再说。
在阅读时可以跳过某些章节,但前言和第 0 章最好按顺序阅读。要是觉得第 2 章难,可以先搞懂第 3 章,要是第 3 章也看不懂,那就试着读一下第 4 章——这种阅读方式也是可行的。
在本书中,我会经常指出一些“C 的问题点”和“C 的随意性”。可能会有一些读者认为我比较讨厌 C 语言。
恰恰相反,我认为 C 是一门伟大的语言。倒不是因为什么“情人眼里出西施”或者“傻乎乎的孩子才可爱”,而是因为 C 语言毕竟是在开发现场常年使用的语言,其实力非同一般。虽然长得不太帅,但论才干,那绝对是“开发现场的老油条”——这就是我对 C 语言的看法。
C 是一门实用的语言,现在依然值得学习。虽然我不希望看到阅读本书的读者厌恶 C 语言,但谁讨厌什么,这是我无法左右的。
在本书写作过程中,我得到了很多人的帮助。
感谢在百忙之中阅读拙稿并给予宝贵意见的林毅老师、曾田哲之老师、儿岛老师、梵天老师和丹羽健老师,以及耐心等待我修改原稿的技术评论社的熊谷裕美子老师,承蒙诸位的帮助,本书才得以付梓。在此,谨向他们致以深深的谢意。
前桥和弥
2017 年 10 月 29 日 21:58 J.S.T.