为什么数组中的索引始终以0开头?它与二进制有关吗?例如:
var myArray = [5,6,7,8];
要访问数字5,您必须说
myArray[0]
但为什么?
不,我没有真正的问题。你可以清楚地告诉我,我对这些东西不熟悉。
答案 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错误方面具有基于单一索引的自然优势。见比较 编程语言(数组)用于各种使用的基本索引 语言。
答案 4 :(得分:0)
在Javascript中,与许多其他语言一样,数组总是从索引零开始,但在所有语言中都不是这样。
例如,在Pascal中,您定义了下边界和上边界,因此您可以在索引3处启动数组:
var myArray: Integer[3..6];
最常见的是将数组设置为零,因为在访问项目时这是最有效的。如果从任何其他索引开始,则在计算存储项目的地址时必须减去该值。这个额外的计算今天不会成为一个问题,但是当像C这样的语言构建时肯定是这样。
(好吧,Javascript中的数组实际上与大多数其他语言完全不同,但是它使用零基索引,因为大多数类似的语言,灵感来源于此。)