数组的下标为什么要从0开始

数组的下标为什么要从0开始?

大多数同学可能从来没有想过,为什么C语言,Java这些语言的数组下标都是从0开始的呢?我以为有两种原因。

数组的寻址方式决定


我们都知道数组是一种线性表,数组的定义是一组连续内存空间的相同类型的数据。

这里有个关键词,“连续”。

为什么我们经常说数组适合用来查询而链表适合增删呢,原因就在于这个数据结构是不是在连续的内存空间里面。比如说我有一个数组{2,3,5,1},假设数组的首地址为baseAddr,那么我要寻找第a[i]这个元素的方式就是:baseAddr + i * 内存块大小。

而如果我们的数组是从1开始的,这个公式就变为baseAddr + (i - 1) * 内存块大小。看到了吧,每次都要减1。也许你觉得这点对性能的影响微乎其微,但是数组作为一个基础的数据机构,用到的地方是在太多,这一点点的优化也许就是对性能大大的提升呢!!!

历史原因决定


上面的说法其实也不准确,像现在很出名的python人家的下标就不是从0开始。。。所以,我觉得最合理的解释是,最早的C语言的创始人不知道为什么要从0开始,然后呢,后面的Java,C++等各类语言就学习模仿都从0开始。

zhangxingrui wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!