以C语言举例,数组本质上就是一块连续的内存,由一个首地址和地址增量实现对数组元素的读写。
假设一个数组arr,我们知道arr就是数组第一个元素的地址。那么
第一个元素:arr[0] = *(arr + 0)
第二个元素:arr[1] = *(arr + 1)
…
第i+1个元素:arr[i] = *(arr + i)
因此我们可以得出结论:
索引并不是数组元素的编号,而是元素地址相对于首地址的增量
那么如果强行让索引满足人类的习惯,即从1开始,会发生什么呢?
第一个元素:arr[1] = *(arr + 1-1)
第二个元素:arr[2] = *(arr + 2-1)
…
第i个元素:arr[i] = *(arr + i -1)
第i+1个元素:arr[i+1] = *(arr + i+1-1)
可以看到,人类是舒服了,但在数组机制不变的情况下,计算机每次都要多做一次减法。
该怎么抉择是显而易见的了,毕竟人类的习惯可以改变。