为什么数组从0开始

为什么C语言的数组从零开始呢?我觉得要理解这个问题,首先要有两个概念——地址偏移


注意下面两个语句:

array[10]

*(array+10)

这两条语句都是指向同一个元素。这两条语句是等价的。


即是说,array[0]就是*(array+0)

数组的下标就是对array这个数组进行偏移。这是硬件特性决定的。

因为数据都是存放在内存地址里的,而数据的获取方式,是先得到一个数据的地址,然后对其进行偏移。


如果数组从1开始计算,那么获取数组的第一个元素表达方式就是array[1]

但是数组的第一个元素的地址就是array,CPU每次获取元素需要减去1。

即必须这样做:*(array + 1 – 1)

其中+1操作是数组的下标,-1操作是为了获得正确的元素地址。

如果数组从1开始,会多了减1这个操作,增加了CPU的运算,浪费CPU资源。


为了提高CPU的效率,只需要简单把数组从1开始修改为从0开始就可以了。



如果还不是很明白,可以看一下等差公式

an=a1+(n-1)d

其中n是第n个,d是两个数之间相差的数,这里设为1。


于是CPU为了获取数组的第n个元素,首先获得a1的地址,然后再从该地址出发,加上n-1,此时的地址就是所需的元素地址。但是每次都要进行-1操作,-1操作也是要消耗时间的,这样很浪费CPU资源。于是语言设计者决定数组从0开始,这样这公式就可以化为

an=a0+n

少了-1这一步骤,提高了CPU的效率。

    原文作者:秀秀很久没写文章了
    原文地址: https://blog.csdn.net/u012163234/article/details/29239905
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞