为什么当我将z -1更改为z——时输出会发生变化?



我有以下c++程序:

#include <iostream>
using namespace std;
//looping through arrays backwards
int main() {
int a[3] {1, 2, 3};
int x = sizeof(a), y = sizeof(int), z = x / y;
for(int i = z - 1; i >= 0; i--) {
cout << a[i] << " ";
}
return 0;
}

输出3 2 1。但是如果我把for循环中的第一个参数改为int i = z--;,它输出的是2 3 2 1,我不明白为什么。难道z - 1z--不应该是一样的吗?有人能解释一下原因吗?此外,我是c++的初学者,我正在通过W3Schools教程学习它。谢谢!

表达式z--求值为z,然后——作为副作用——z递减(根据调度规则调度)。这意味着,您实际上在循环中说int i = z(然后递减z,但它不再使用)-因此,您的代码具有UB。打印的2纯粹是巧合,任何东西都可能打印出来,或者代码中可能发生任何事情。如果您想使用--,请使用它作为前缀,即int i = --z

最新更新