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

D中的减量运算有区别吗?,d,D,我正在使用动态数组来实现我的堆栈。我写的流行音乐如下: int pop() { int n = arr[--arr.length]; return n; } 使用上面的代码,我在运行时得到一个范围冲突错误。但使用以下代码: int pop() { int n = arr[arr.length - 1]; arr.length--; return n; } 它很好用。我不明白为什么,对我来说,两者应该是相等的。我错

我正在使用动态数组来实现我的堆栈。我写的流行音乐如下:

int pop() {
        int n = arr[--arr.length];
        return n;
}
使用上面的代码,我在运行时得到一个
范围冲突
错误。但使用以下代码:

int pop() {
        int n = arr[arr.length - 1];
        arr.length--;
        return n;
}
它很好用。我不明白为什么,对我来说,两者应该是相等的。我错过了什么

编辑: 也许这就是为什么
--arr.length
会导致我将要访问的元素从数组中“删除”的原因


而且,
push(N)
只是
arr~=N

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

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

下面是一个简单的
int n=arr[--arr.length]
操作,其中包含一个元素:

  • arr.length=1
  • 最后一个元素位于位置0
  • 评估
    --排列长度
    
    
    • arr减少到零元素
    • arr.length返回0
  • 计算
    int n=arr[0]
    • arr为空,中断

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

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

下面是一个简单的
int n=arr[--arr.length]
操作,其中包含一个元素:

  • arr.length=1
  • 最后一个元素位于位置0
  • 评估
    --排列长度
    
    
    • arr减少到零元素
    • arr.length返回0
  • 计算
    int n=arr[0]
    • arr为空,中断