专栏首页数值分析与有限元编程为何数组索引从0开始?

为何数组索引从0开始?

一些编程语言的索引从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》

本文分享自微信公众号 - 数值分析与有限元编程(program_fem),作者:苦丁茶123

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 算法| 冒泡法排序

    对于一个一维的数组(列表),每个元素都和它旁边的元素作比较,顺序不对就交换位置。第一次处理全部n个元素,最大值将冒泡到数组末尾位置。第二次处理全部n-1个元素,...

    fem178
  • Jacobi方法求实对称阵的特征值

    Jacobi方法用于求实对称阵的全部特征值、特征向量。对于实对称阵 A,必有正交阵 Q ,使 QT A Q = Λ 其中Λ是对角阵,其主对角线元素λii是A的特...

    fem178
  • Debug模式 和 Release模式

    很多编译器允许两种编译链接方式:Debug模式 和 Release模式。这两种链接方式的区别主要是: Debug 模式:程序几乎不进行优化。产生的可执行程序具有...

    fem178
  • 空与非空:浅谈非空约束的影响

    黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 非空约束...

    数据和云
  • Dancing Links算法

     Dancing Links算法主要用于解决精确覆盖问题,精确覆盖问题就的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得每个集合中每一列恰好只包...

    mathor
  • HTML基础知识

      属性的作用就是就为元素提供更多的信息,大多数元素都可以拥有属性    属性的语法:<标签 属性1=参数1>   注意空格的使用

    用户3159471
  • 编程小白 | 每日一练(103)

    这道理放在编程上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从编程小白进阶到高手,需要经历的是日积月累的学习,那么如何学习呢?当然是每天都...

    闫小林
  • 学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

                  通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

    IBinary
  • Jerry的WebClient UI 42篇原创文章合集

    我要感谢CRM On Premise, 因为在这个产品上做开发让我得以使用WebClient UI框架。有些朋友觉得这个SAP自己发明的基于HTML+ABAP的...

    Jerry Wang
  • 140个机器学习公式大全手册

    阅读原文下载pdf https://pan.baidu.com/s/1hsE6JFe

    用户1908973

扫码关注云+社区

领取腾讯云代金券