尚腻网 > 生活 > 正文

​谭浩强C语言真的误人子弟了吗?

2024-11-01 13:08 来源:尚腻网 点击:

谭浩强C语言真的误人子弟了吗?

写在前面

本文评价纯属个人观点,没有任何相关利益。

谈起C语言,不得不提谭浩强,他很早就涉足国内的编程教学,人称“中国的C语言之父”。

大学毕业时,把大部分教科书(包括我那本学校自编的C语言教程)都给卖掉了。现在想看看C语言,又没有实体教材,回老家时突然发现在校时,学长送给我的C语言教材(谭浩强C语言,第三版),还在书桌上吃灰(真的吃灰,书皮上全是灰)。

谭浩强C语言的特点

谭书的内容比较完善

从整体结构上看,谭书条例还是比较清晰的。从概述、数据类型,到逻辑结构控制,再到数组、函数和指针,以及其他内容,C语言该有的知识点基本都涵盖了。对于初学者来说,这样一本教材,用来作为入门书已经够用了。

谭书使用的内容有点老旧

看了下书中的C开发环境,还在推荐使用的TC和C89。再看看,书籍的出版年份,是2010年出版的。什么?2010年也不至于用这种环境,好歹也该用个VC++6.0(启动速度快,操作简单,功能强大,适合初学者使用)。看到这里,不得不说,谭老在学术方面还是挺执着的。

不过话说回来,我们是来学C语言的,不是来整编辑环境的。所以大家在学习C语言时,还是把重点放在C语言的逻辑学习上,不要过于纠结编辑环境的优劣。如果觉得TC不好用,这里推荐初学者使用Dev-C++(下载地址:https://bloodshed-dev-c.en.softonic.com/),安装之后就能使用,无需配置编译器

在谭书中发现的一个案例

while((*p2++=*p1++)!='\0');//已修正

我仔细看了看,这样的例子在谭书中不止一次出现。这句代码的功能是拷贝字符数组,我们先不谈这种写法的执行效率有多高,单从代码的阅读体验上来看,真的是让人很抓狂

下面来分析一下这句代码的意思:

微软开发者网上有一个类似的案例分析,是用C#语言解释的,但是不影响我们的理解。具体内容如下:

上图是说赋值表达式返回的结果是“左值”,返回类型也与左操作数相同。

可以看到,上图最后写到:你不要在实际生产环境中这样写代码

那么这句代码到底如何理解了,你可以这么想,p2所指向的内容,是由p1所指向的内容赋给的。也就是说,*p1和*p2单从值内容上看,是相等的。因此上面的代码可以这样理解:

while(*p1!='\0') { *p2=*p1; p1++; p2++; }

总结

初学C语言,还是要学会掌握C语言的精炼表达,不要把大量的时间花在一些看似巧妙,却没有什么实际用途的技巧上。谭老的书其实没有太大问题,只是“一千个人会有一千个哈姆雷特”,不要太在意谭书的小问题,重在理解C语言的精髓

另外如果大家还想阅读其他C语言材料,可以选择《C Primer Plus》这本书,这本书从名字看就知道是一本C语言入门经典。这是一本大部头的书(第六版有一千多页),慢慢啃吧(英语基础好的,直接啃原版,效果更佳)。最后祝大家C语言学习愉快。