C# 中负数组索引的行为
Posted
技术标签:
【中文标题】C# 中负数组索引的行为【英文标题】:Behaviour of negative array index in C# 【发布时间】:2018-07-13 20:50:44 【问题描述】:我是 C# 的新手。我知道 C 和 C++ 语言。目前我有一个 C# 相关的项目。所以,我只想知道关于 C# 的基本概念。
在 C# 中,如果我给出负数组索引,那么会发生什么?是未定义的行为吗?
喜欢:
int [] arr = 1,2,3;
Console.WriteLine("0", arr[-1]);
【问题讨论】:
为什么不简单地尝试一下呢?我认为我们可以期望 14k 用户至少知道您可能会在 Stack 上提出什么样的问题以及如何这样做。 【参考方案1】:只要索引超出该数组的有效索引范围,您的程序就会抛出 IndexOutOfRangeException
异常。
如果您花一点时间尝试一下,您就会亲眼看到。
【讨论】:
【参考方案2】:如果您访问超出其索引范围的数组,您将收到 System.IndexOutOfRangeException。 对于任何负索引或任何大于或等于 array.Length 的索引,都会出现此异常。
【讨论】:
【参考方案3】:int [] arr = 1,2,3;
编译器会将上述语法糖在内部转换为
int [] arr = new int[] 1,2,3;
所以编译器会自动计算 arr 长度为 3。
编译器不允许你定义未知大小的数组。
int[] arr=new int[];//compiler error,array creation must have size.
所以下面的语句
Console.WriteLine(arr[-1]);
将抛出 “System.IndexOutOfRangeException”类型的未处理异常。
【讨论】:
arr=1,2,3 内部将被转换为 int[]。还有为什么 -1 是不允许的,因为数组索引从 0 开始,那是因为它在内部使用指针并且低于 0是垃圾值,因此编译器警告不要给出无效的索引。而且我正在绑定移动设备之前没有看到你的答案。以上是关于C# 中负数组索引的行为的主要内容,如果未能解决你的问题,请参考以下文章