我有以下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 - 1
和z--
不应该是一样的吗?有人能解释一下原因吗?此外,我是c++的初学者,我正在通过W3Schools教程学习它。谢谢!
表达式z--
求值为z
,然后——作为副作用——z
递减(根据调度规则调度)。这意味着,您实际上在循环中说int i = z
(然后递减z
,但它不再使用)-因此,您的代码具有UB。打印的2
纯粹是巧合,任何东西都可能打印出来,或者代码中可能发生任何事情。如果您想使用--
,请使用它作为前缀,即int i = --z
。