为什么数组的下标从 0 开始
2023-06-23 10:45:36
从大一开始学 C++的时候就被告知的是数组的下标从 0 开始,写代码的时候不管是循环还是什么都是从 0 下标开始取,Array[0]就是数组的第一个元素,但是没想过为什么下标是从 0 开始而不是从 1 开始,从 1 开始不是更方便去计算吗,不然每次遍历数组的时候结束条件都要再数组长度-1。
其实这背后是有原因的
首先我们都知道数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
当我们定义一个数组后,计算机会分配一块连续的内存空间,然后给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当需要访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址
a[i]_address = base_address + i * data_type_size
1
但是,如果数组从 1 开始计数,那我们计算数组元素 a[i]的内存地址就会变为
a[i]_address = base_address + (i-1)*type_size
1
从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。
数组作为非常基础的数据结构,通过下标访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。