首页/文章/ 详情

为何数组索引从0开始?

1月前浏览115

本文摘要(由AI生成):

本文讨论了不同编程语言中数组索引的差异,如Fortran从1开始,而Python或C++从0开始。无论哪种语言,最终程序需转化为机器码执行。在机器层面,数组索引通过寄存器中的地址和偏移量处理。C++等基于0的索引语言在计算元素地址时效率略高,但此优势对现代计算机而言微不足道。C系列语言的设计思路更接近CPU操作。

一些编程语言的索引从1开始。比如在Fortran中,声明数组integer :: array(5)会创建一个包含5个元素的数组。要访问第一个位置的元素,则索引为1,即array(1)。而在python或者C++语言,第一个元素的索引则为0。

不管用什么语言编写程序,最终都要转化成CPU能实际执行的机器码。

在机器级别,数组索引通过偏移量来处理:一个寄存器(CPU内部特殊的内存)数组地址(数组第一个元素的地址),而另一个寄存器则包含偏移量,即到目标元素的距离。

第一个元素的偏移量和C++一样是0,使用Fortran这样的语言,必须先将基于1的索引转换成基于0的索引,再乘以每个元素的地址大小获得索引为i的元素地址:

                 元素i的地址 = 基本地址+((i-1)*每个元素地址大小)

而C++这样基于0的索引的语言则可以稍微提高一下效率:

                 元素i的地址 = 基本地址+(i*每个元素地址大小)

表面上看起来是节省了一些CPU运行时间,这对于现代计算机硬件设施来说微不足道。不过所有C系列语言(C,C++,C#)就是这样的的设计思路,也最接近CPU所做的事情。

参考文献《C++ Without Fear,3rd》

来源:数值分析与有限元编程
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:1月前
太白金星
本科 慢慢来
获赞 2粉丝 4文章 283课程 0
点赞
收藏

作者推荐

未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈