昨天搜图片素材的时候看到一张图,笑到岔气

这个梗指的是大部分编程语言在索引数组的时候,都会从0开始。如果你的入门编程语言是Basic, C,C++,Java ...... 那在转到学习MATLAB的时候多半都会不适应,因为MATLAB的数组索引是从1开始的。比如一个有五个元素的行向量 example =[ 3 8 54 5 7], 在C语言里想要修改第一个元素的值为30,你需要写 'example[0]=30';而在MATLAB里你需要写 'example(1)=30'。

那么,为什么多数编程语言是从0开始索引的呢?而MATLAB为什么这么特殊呢?

以前的计算机不像现在,计算力很低,因此编写汇编语言很注重寻址效率和储存效率。0x这个地址也是一个地址,不可以浪费。之后的编程语言如C语言,使用指针定位,所以继承了汇编语言从0开始寻址的传统。而MATLAB,正如它的名字来源Matrix Laboratory所暗示的,自诞生之初起就是为处理Matrix(矩阵)和多维数组而设计的,而且当代计算机计算力大为提高,不需要过于考虑寻址效率问题,也不再需要index(指针)这种泛机器语言的东西,所以MATLAB选择了从1开始计数,更符合处理矩阵的思维方式,某种程度上也符合了普通人的思考方式 --- 事实上,明明是刚开始学C语言时的我们吐槽它为什么从0开始更多吧???

从0开始还是从1开始计数这个问题,就好像在国内,建筑的地表上第一层叫一楼,而在英国,建筑的地表上第一层它叫Ground Floor...而First Floor相当于国内的二楼╮(╯▽╰)╭ 什么你觉得国内的叫法才有道理?那么请考虑如下问题:

“假设一栋楼共有十层,某人爬一层楼需要1分钟,那么他爬到顶层需要几分钟?”

如果从0开始计楼层,那么顶层为9,一共需要9分钟,over。是不是解答非常直观,且比去计算(10-1)*1要少一步计算?类似的还有数列通项公式,21世纪对应20xx年等等。我今天写MATLAB的时候想写个多项式通用公式,即an*x^n+an-1*x^n-1+...+a1*x+a0, 系数保存在数组a中。然后发现我的a0必须用a(1)表示,a2必须要用a(2)表示,我表示超级难受!

不同的应用场景诞生了不同的规则和惯例,孰优孰劣又怎好评说。比如Pascal语言允许你从任何一个数开始计数,-100,0.999 ,42什么的  ╮( ̄▽ ̄)╭