指针之美

 

指针之美

看到CSDN 网站论坛上有一个专题《指针的危害》,许多人提出了不同的看法,我基本上都不赞同,所以忍不住要提出我的看法。

说指针是天使者只说了指针的高效率;说指针是魔鬼者则认为指针容易致命的错误,应当尽量少用或用引用来代替云云。

大家的目光只是侷限在单个变量组成的教科书的例题上。现在我给大家提出一个现实的问题:

每个人的信息可以看作单个的结构变量,尽管每个人是独立的,但是他们是有某些联系的。你当然不会一个一个地处理单个的变量,那样太费事了。你会想到把这些变量放到一个数组里,然后循环。

但是人的关系并非单纯的线性关系。不仅中国人有家族观念,连西方人也有。中国的家谱最完善的恐怕就是孔圣人家了吧。如果让你编一个家谱程序,能添加、删除、尤其是插入和遍历,你会把老孔家的人名放到数组里吗?如果放到数组里,程序将复杂得无法想象。但是如果你有了指针,并用它把人名按家谱的对应结构形成一棵倒挂的树,当然是让孔老夫子在树根的位置,那就使得问题简单到了可以实现的程度。

这是为什么呢?因为你在编程之前要做一个需求分析的模型。你先前那个线性数组模型跟家谱不对应,因此你在编程(设计)时就不得不做无尽的转换;而我们树形的模型与家谱是有良好对应的,这样就能模拟真实世界去处理。这个道理就叫做庖丁解牛、顺理成章。切记,自然的就是正确的,人定胜天是骗人,人只能顺天。

即使现实世界的数据结构真是线性的,放到数组里有时也不合适。如果你的数组元素已经是有序的,而且数据经常发生插入和删除,那么你的数组就会经常发生大量数据的前移或后退,而链表就不会的。

指针之美几乎是说不尽的,就鄙人这点学识要说的还刚开头,也许我以后还要说,但不一定专门说。

其实一门计算机语言,并非一定要有指针,这要看这门语言是侧重于什么用途。如FORTRAN语言没有指针,但它是做科学计算用的。JAVA语言没有指针,那是因为它生下来就是为了网络编程,而网络编程是用不到指针的。所以说,不能单纯地用指针来衡量一种计算机语言的优劣,但毫无疑问,有指针的计算机语言的适用范围更大。

有人说用C++的引用代替指针。这要分场合,函数传参使用引用确实很好,尤其是对初学者。但是你用引用去构造一个树形结构的模型出来我看看。

正是因为有了指针,人们构造了各种数据结构的模型及其相应的美妙的算法,才形成了非常有用的数据结构这门学科。你可以根据提供的算法,稍加改造,用到你的程序里去。更有甚者,现在C++提供了STL标准模板库,你可以当作黑箱使用而不必知道内里的算法实现。

指针对初学者是魔鬼这句话未免言重了,我觉得它不应该那么难,我很想以后在这方面帮助需要帮助的人。

我叫陈树振,是一个老头,64岁,上世纪90年代天津保税区电力公司用的用电业务系统就是我编的。

我是69日才正式进入CSDN的。进入的原因是为了我写的书的出版。出版社觉得我写的不错,但认为我没有名气,每到快出版的时候就反悔,其中北京希望电子出版社合同公章都盖了,还反悔了呢。有编辑给我出主意,让我在CSDN上弄点人气,所以陈老汉就登台亮相了,这是我的第一篇博文,希望朋友们支持我。

 

点赞