我们常用的开发语言,比如C语言,C#,Java,Nodejs,Swift等,他们的数组起始编号都是0,这个原因究竟是什么,已经很难回滚到历史开始的阶段进行追溯,不过,我们也可以做一些分析和总结。
1. 索引更快速
数组本身的杀手锏技能,当通过索引随机访问时,对应的时间复杂度是O(1),由于数组是线性表结构,而数组的索引访问时,其线性表结构决定访问时可以通过索引直接计算出目标索引对应的地址值,以0开头的索引可以直接用索引值本身来计算,跟1开头时相比少一次减一操作,作为最常用的数组,以0开头可以减少一次CPU的计算。
或者可以理解为,数组的索引本身指的是偏移量,相对于第一个索引位置的偏移量。
2. 历史遗留问题
C语言选择了以0开头,而作为最早被广泛学习和接受,或者说大学里面普及度相对较高的高级编程语言,其它C#,Java等实际工程中用到的编程语言,为了减少迁移成本,所以继续沿用了从0开头。
3. 其实也有例外
当然,也不是所有编程语言都是从零开头的整数,其实也有语言不是这么设计的,比如Matlab的.m程序就是从1开始的,Python数组索引可以是负值,用负值表示方向,也只是范围读取(类似Matlab),当然Python默认也是从0开始。