我有一个长度为1的静态大小数组,我尝试在索引0处分配一个值。
void main() {
int length = 0;
int[1] arr;
arr[0] = 1;
arr[length] = 2;
}
使用上面的代码,我得到
的运行时错误Error: ArrayBoundsError array.d(6)
对该行进行协调:arr [length] = 2。
为什么常量0有效,但值为0的变量不起作用?
答案 0 :(得分:4)
length
在索引/切片表达式中具有特殊含义 - 它与$
(被索引/切片的数组的长度)完全相同。因此,arr[length]
将始终生成ArrayBoundsError
。
注意:D2中不推荐使用length
,D1和D2都会发出警告(启用警告时):array 'length' hides other 'length' name in outer scope
。