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

首先,我们先来看看数组的定义:数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

然后,我们再来看看数组的下标是什么意思:下标是现对于第一个数组元素的偏移量 – offset,例如:数组 a[0] 则代表偏移 0 个位置,数组 a[1] 则代表偏移 1 个位置。
在这里插入图片描述
用图片表示如上图。
数组都有分配内存的首地址,我们把首地址定义为:base_address
那么如上图中 base_address 为 1000,即是 a[0] = 1000

我们可以很容易地从图中得出数组的寻址公式:

a[n] = base_assress + offset * unit_byte

那么:

a[0] = 1000 + 0 * 4
a[1] = 1000 + 1 * 4
a[2] = 1000 + 2 * 4

如果,这个时候,我们用 1 作为数组的首个下标,那么:
a[1] 对应原来的 a[0]
a[2] 对应原来的 a[1]

寻址公式如下:

a[n] = base_assress + (offset - 1) * unit_byte

那么:

a[1] = 1000 + (1-1) * 4
a[2] = 1000 + (2-1) * 4
a[3] = 1000 + (3-1) * 4

我们可以看到,相对于原来的以 0 作为首个下标,1 作为首个下标需要多一步减法操作,这个时候 CPU 就需要多做一个减法,虽然只是一个简单的减法操作,但是数组是很基础的数据结构,经常会大量用到,这就会给程序带来庞大的计算量。所以,用 0 作为首个下标,可以省掉一些计算操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值