数组就是指针为什么是错的?

发布时间:
2024-10-12 03:14
阅读量:
12

这句话就是为什么我不爱让新人学C的原因之一。

因为这句话背后体现了一个「我只需要关心一个东西本质上是什么」的还原主义的观念

这就好像「物质本质上都是原子和分子的组合,所以我学物理就行了,不需要学化学」

先不说离了C系语言,这句话根本就是错的。而这个观念只有在写部分单片机程序的时候有用,对于你写任何其他代码的时候,都是有害的

(我知道有人要说一些执行效率之类神神秘秘的大大优化,但是绝大部分人自以为的所谓优化,尤其是这种用奇技淫巧写一堆毫无可读性的代码,极有可能作用是小于等于编译器优化的,甚至可能是负优化)

因为计算机科学和软件工程构建高复杂度软件的核心原理是抽象。通过抽象,我们得以在人类可以承受的时间和心智负担范围内,去编写和理解那些复杂度达到几十年前的人远远无法想象程度的程序

而数组就是一个对于内存的抽象,通过这个抽象,你得以从更高的抽象层次,对数据进行操作——只不过这个抽象,在C编译器里面是使用指针和偏移量实现的,所以你常常可以通过一些隐式类型转换,通过神必的操作读写到里面的某些元素

能读取到,代表你的代码里就要这样读写吗?「8班的2号学生的身高」为什么要说成「全校学生名册第8页的第二行的第三格」?

后者我们都知道不像人话,怎么到了写代码的时候比这挠谭得多的写法,一个两个屁颠着写?就为了显得你语言懂得多,像个高手是吧

说难听点这就好像那种学个外语,然后成天拽外语古文thy thou thine的,还以为人家觉得你很牛,人家听不懂觉得你装杯都是轻的,更有可能觉得你就是个没法交流的纱布

C本来就那么一点抽象精神,还都让你给解完了

这就是为什么国内的学生往往在学C的时候掉一层皮,学个数据结构又掉一层皮,学更高级的抽象(比如OOP)的时候又掉一层皮

因为一开始教的就是这种还原论式的,不使用抽象去解决问题的思想,只用一条条命令拼凑出你想要做的东西,然后就很容易学成那种一写就几十个if嵌套、一大堆指针和取地址套娃的程序员,写出来的代码毫无抽象度,别说别人看不懂,连自己过一个礼拜也看不懂。

然后到了数据结构和OOP这种东西的时候,复杂度一过载,直接往地上一躺

END