为什么数组大小声明使用"1"作为第一个索引?

the*_*age 4 c# java arrays

关于C#/ Java,我注意到的一点似乎是(对我来说)数组大小声明和数组大小的默认第一索引的不一致问题.

使用数组时,假设您要创建一个新的整数数组大小3,它将如下所示:

int[] newArray = new int[3] {1, 2, 3};

完全找到并且可读......对吗?

编程语言的标准似乎要求"第一"指数0.

使用该逻辑,如果我有兴趣创建一个大小的数组3,我应该写这个:

int[] newArray = new int[2] {1, 2, 3};

等一下...... VS正在抛出一个错误,说道an array initialize of length 2 is expected.

因此循环数组和数组大小声明的第一个索引是不一致的?前者使用0基于第一的索引,第二1个使用第a 个索引.

这不是任何形式或方式的游戏破坏/改变,但我真的好奇为什么这里存在差异,或者地狱,如果这甚至是一个问题(就像我说的那样,它不会以任何方式破坏游戏,但我很好奇为什么这样做了).

我现在可以想到为什么1使用基于索引的原因:

在for循环中,您将使用< newArray.Length而不是< newArray.Length - 1< newArray.Length.

使用Lists一段时间,然后回到size-needs-be-declared-arrays阵列让我有些措手不及.

Wim*_*dse 15

因为您声明数组将包含它将包含的元素.

我不确定这是不一致的.

你需要多少次看到切3块碎木?提示:不是3次.

另请注意,在帖子标题中,您错误地将数组大小声明称为"索引".


Neu*_*tra 5

我认为你把索引器与长度混淆了.您希望在数组中包含三个元素(或变量),表示为

...new int[3]...
Run Code Online (Sandbox Code Playgroud)

并且大括号中的元素是值,而不是索引.指数仍为0.Longform看起来像这样:

int[] newArray = new int[3];
        newArray[0] = 1;
        newArray[1] = 2;
        newArray[2] = 3;
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到基于零的索引与int []的值相关的位置.