数组中的第一个元素

时间:2013-08-09 23:30:42

标签: javascript arrays

为什么数组中的索引始终以0开头?它与二进制有关吗?例如:

var myArray = [5,6,7,8];

要访问数字5,您必须说

myArray[0]

但为什么?

不,我没有真正的问题。你可以清楚地告诉我,我对这些东西不熟悉。

5 个答案:

答案 0 :(得分:2)

我确信这已被问过一百次回答,但我会咬人。

查看“索引”或“键”的一种方法是“偏移”。

myArray基本上充当指针到一系列项目中的第一项。具体来说,它指向内存中的数字“5”。所以,当你说myArray[1]时,它就像是说“myArray中第一个元素的位置加上1个项目”,因此你会跳过第一个元素。

在C中,当您编写*myArray(指针取消引用)时,它实际上会返回第一个元素。

#include <stdio.h>

int main(void) {
    int myArray[] = {5,6,7,8};
    printf("%d",*myArray); // prints "5", equivalent to myArray[0]
    printf("%d",*(myArray+1)); // prints "6", equivalent to myArray[1]
    return 0;
}

more practical个原因而不是“这就是计算机的工作方式”。

答案 1 :(得分:1)

答案 2 :(得分:0)

这是基本的计算机科学知识,它可以追溯到内存如此有限的那一天,一切都以0而不是1开始,因为如果你从0开始,你可以在一个数字内计算多达10个总数。

你显然对此很新,相信我,从现在开始,你将算上0,1,2,3!

答案 3 :(得分:0)

维基百科向我们提供了这样的解释:

  

索引来源

     

某些语言(如C)仅提供从零开始的数组类型   其中任何索引的最小有效值为0.这个选择是   方便阵列实现和地址计算。有了   语言如C,指向任何数组内部的指针都可以   定义将象征性地充当容纳的伪阵列   负面指数。这只是因为C不检查索引   使用时反对边界。其他语言仅提供基于一个的数组   类型,每个索引从1开始;这是传统的   矩阵和数学序列的数学公约。一个   几种语言,如Pascal,支持基于n的数组类型,其中   程序员选择最低法律指数。亲戚   每种选择的优点都是激烈辩论的主题。   基于零的索引在避免逐个或fencepost错误方面具有基于单一索引的自然优势。见比较   编程语言(数组)用于各种使用的基本索引   语言。

Read more about arrays here

Read more about off-by-one and fencepost errors here

答案 4 :(得分:0)

在Javascript中,与许多其他语言一样,数组总是从索引零开始,但在所有语言中都不是这样。

例如,在Pascal中,您定义了下边界和上边界,因此您可以在索引3处启动数组:

var myArray: Integer[3..6];

最常见的是将数组设置为零,因为在访问项目时这是最有效的。如果从任何其他索引开始,则在计算存储项目的地址时必须减去该值。这个额外的计算今天不会成为一个问题,但是当像C这样的语言构建时肯定是这样。

(好吧,Javascript中的数组实际上与大多数其他语言完全不同,但是它使用零基索引,因为大多数类似的语言,灵感来源于此。)