D中的减量运算符有区别吗?

时间:2014-06-27 19:20:48

标签: d

我使用动态数组来实现我的堆栈。我写了pop如下:

int pop() {
        int n = arr[--arr.length];
        return n;
}

使用上面的代码我在运行时遇到Range violation错误。但是使用以下代码:

int pop() {
        int n = arr[arr.length - 1];
        arr.length--;
        return n;
}

工作正常。我不明白为什么,对我来说两者都应该是等价的。我错过了什么?

编辑: 也许这就是为什么--arr.length导致我要访问的元素被删除"从数组?

此外,push(N)只是arr ~= n;

1 个答案:

答案 0 :(得分:5)

您在抓取之前删除了该元素。您必须检索元素,然后减小数组的大小。

--arr.length正在减少数组的长度,然后返回新的缩小大小。然后,您尝试执行int n = arr[arr.length]

这是int n = arr[ --arr.length ]的简单练习,包含一个元素:

  • arr.length = 1
  • 最后一个元素位于0
  • 评估--arr.length
    • arr减少为零元素
    • arr.length返回0
  • 评估int n = arr[0]
    • arr是空的,休息。