【发布时间】:2014-03-19 16:10:21
【问题描述】:
我注意到关于 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-th 的索引,第二个使用1-th 索引。
这不是以任何形式或方式破坏游戏/改变,但我真的很好奇为什么这里存在差异,或者地狱,如果这甚至是一个问题(就像我说的,这不是游戏破坏无论如何,但我很好奇为什么会这样做)。
我现在可以想到为什么要使用基于1-th 的索引:
在 for 循环中,您将使用 < newArray.Length 而不是 < newArray.Length - 1 或 < newArray.Length。
与Lists 合作了一段时间,然后回到 size-needs-to-be-declared-arrays 让我有点措手不及。
【问题讨论】:
-
如果你使用静态数组初始化器,你甚至不必声明长度:
new int[] { 1, 2, 3 } -
无意冒犯,但我认为您并没有真正考虑到这一点。长度不是任何类型的索引,既不是从 0 也不是从 1。
-
你没有看错——我绝对没有看到长度和索引之间的区别,我很高兴这篇文章可以澄清它。
-
在@harold 所说的后面加上许多花哨的话,你会混淆cardinal numbers and ordinal numbers。
-
如果你想要一个边界为 [-15, -5] 的数组,你应该用 -5 个元素创建它吗? :) (不是每种语言都强制使用基于 0 的索引,即使是 .Net 一次 - 请查看 stackoverflow.com/questions/1301276/…)