美文网首页
数组的下标为何从零开始

数组的下标为何从零开始

作者: Xanchain | 来源:发表于2019-03-01 17:00 被阅读0次

    原因一:历史原因

    语言出现顺序从早到晚,比如:C、Java、JavaScript。

    C语言数组下标是从0开始->Java也是->JavaScript也是。

    降低额外的学习和理解成本。

    那么C中为什么会从0开始呢?我们可以看一下第二个原因。

    原因二:可以减少CPU指令运算,提高运算效率

    (1)当下标从0开始:

    数组寻址——arr[i] = base_address + i * type_size(1)

    其中base_address为数组arr首地址,arr[0]就是偏移量为0的数组,即数组arr首地址;i为偏移量,type_size为数组类型字节数,比如int为32位,即4个字节。

    (2)当下标从1开始:

    数组寻址——arr[i] = base_address + (i -1)* type_size(2)

    比较两个计算公式可以发现公式(2)每次CPU寻址需要多一次 i-1的操作,即多了一次减法的指令运算。

    对于数组这种基础数据结构,无论在哪种高级程序语言中,都是频繁间接(作为容器的基础数据结构,比如Java的ArrayList)或者直接被使用的,因此要尽量减少其消耗CPU资源。

    原因三:物理内存的地址是从0开始的

    计算机主存是多个连续字节大小的单元组成的数组,每个字节都对应唯一的物理地址,第一个字节的地址为0。

    另:并非所有的语言都是从0开始的,有一些语言也从1开始或者为负数。为了更方便理解,我们可以将数组下标理解为偏移量而非第几个数。

    相关文章

      网友评论

          本文标题:数组的下标为何从零开始

          本文链接:https://www.haomeiwen.com/subject/jblxuqtx.html