目录
  1. 1. 数组
    1. 1.1. 下标
  2. 2. 效率原因
  3. 3. 其他历史原因
数组下标为啥从0开始

数组

这里我们拿一维数组举例

一维数组说开了就是一组连续的数值,这组数值存储在一段连续的内存空间之中,只是不一样的是,若是我们不定义数组我们来访问这一连串的数值需要n个变量对应这n个数值或是需要一个指针进行遍历。只是现在我们为这一组值起了个名字而已,以后我们便可以通过这个名字+下标来访问这一组值了

下标

下标这玩意确切的定义应该是偏移,如果用array来表示一个数组的首地址,那array[0]其实也就是这个首地址,array[index]就表示偏移了index个type_size(每个数组元素占用内存的大小),所以计算array[index]的内存地址就是

1
array[index]_address = base_address + index * type_size;

如果下标从1开始计算那么这个内存计算公式就要改为

1
array[index]_address = base_address + (index - 1) * type_size;

每次都会多执行一次减法运算

效率原因

下标从1开始,每次访问数组元素都需要多执行一个减法运算。

其他历史原因

C语言设计者用0开始计数数组下标,可能大家用的习惯或者觉得原理好理解,之后的Java、JavaScript 等高级语言都效仿了 C 语言,同时也减少新语言的学习成本把。当然不是所有语言都是下标从0的开始的,还有些语言下标都能负数了,比如说python

文章作者: Fibonacci
文章链接: http://sovwcwsfm.com/blog/page/201910111557.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog