var myArray = [5,6,7,8];
要访问数字5,您需要说
myArray[0]
但是为什么呢?
不,我没有真正的问题。显然你可以看出我对这些东西很新。
var myArray = [5,6,7,8];
要访问数字5,您需要说
myArray[0]
但是为什么呢?
不,我没有真正的问题。显然你可以看出我对这些东西很新。
我相信这个问题已经被问答了数百次,但我还是来回答一下。
从某种角度来看,“索引”或“键”可以看作是“偏移量”。
myArray
本质上充当了一个指向一系列项目中第一个项目的 指针。具体而言,它指向内存中的数字“5”。因此,当您说myArray[1]
时,就相当于说“在myArray
的第一个元素位置跳过一个元素”,进而会跳过第一个元素。
在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;
}
除了“计算机就是这样工作”的理由外,还有比这更实际的原因。
(参考链接:更多实用资料)
var myArray: Integer[3..6];
在编程中,数组通常从零开始,因为这样访问项目时最有效。如果从任何其他索引开始,则在计算存储项的地址时必须减去该值。虽然在今天,这种额外的计算不是问题,但在像C语言这样构建的语言出现之前,它肯定是问题。
(好吧,在Javascript中,数组实际上与大多数其他语言完全不同,但使用基于零的索引,因为大多数类似语言都是如此,灵感来自这些语言。)
这是基本的计算机科学知识,它回溯到内存非常有限的时代,一切都从0开始而不是1,因为如果你从0开始,你可以在一个数字中计数十个总数。
你显然是新手,相信我,从现在开始,你将会数0、1、2、3!
维基百科给出了以下解释:
索引起点
一些语言(如C语言)仅提供从零开始的数组类型,对于这种类型的数组,任何索引的最小有效值都是0。这种选择对于数组实现和地址计算非常方便。在像C这样的语言中,可以定义指向任何数组内部的指针,该指针将象征性地充当一个伪数组,以容纳负索引。这仅适用于C不在使用时检查索引是否超出范围。其他语言仅提供从1开始的数组类型,其中每个索引都从1开始;这是矩阵和数学序列的传统约定。少数语言(如Pascal)支持n-based数组类型,其最小合法索引由程序员选择。每种选择的相对优点一直是激烈辩论的主题。与从1开始的索引相比,从0开始的索引在避免偏移一或栅栏错误方面具有自然优势。请参见各种语言使用的基础索引的编程语言(数组)比较。