为什么数组是从0开头,而不是1?

我们常用的开发语言,比如C语言,C#,Java,Nodejs,Swift等,他们的数组起始编号都是0,这个原因究竟是什么,已经很难回滚到历史开始的阶段进行追溯,不过,我们也可以做一些分析和总结。

1. 索引更快速

数组本身的杀手锏技能,当通过索引随机访问时,对应的时间复杂度是O(1),由于数组是线性表结构,而数组的索引访问时,其线性表结构决定访问时可以通过索引直接计算出目标索引对应的地址值,以0开头的索引可以直接用索引值本身来计算,跟1开头时相比少一次减一操作,作为最常用的数组,以0开头可以减少一次CPU的计算。
或者可以理解为,数组的索引本身指的是偏移量,相对于第一个索引位置的偏移量。

2. 历史遗留问题

C语言选择了以0开头,而作为最早被广泛学习和接受,或者说大学里面普及度相对较高的高级编程语言,其它C#,Java等实际工程中用到的编程语言,为了减少迁移成本,所以继续沿用了从0开头。

3. 其实也有例外

当然,也不是所有编程语言都是从零开头的整数,其实也有语言不是这么设计的,比如Matlab的.m程序就是从1开始的,Python数组索引可以是负值,用负值表示方向,也只是范围读取(类似Matlab),当然Python默认也是从0开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放羊郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值