我的代码是为了反向打印一个数组,但由于某种原因,减量运算符没有按预期工作。根据我的理解--var
在完成任何操作之前递减变量var
,而var--
在操作完成后递减变量var
,例如for
}循环。
这是我的代码:
#include <iostream>
int main() {
int arrLen;
int arr[4];
scanf("%d\n %d %d %d %d", &arrLen, &arr[0], &arr[1], &arr[2], &arr[3]);
for (; arrLen >= 0; --arrLen)
printf("%d %d\n", arr[arrLen], arrLen);
return 0;
}
这是我的结果(输出中的正确值是递减的变量,我添加它来检查):
0 4
2 3
3 2
4 1
1 0
如果没有打印递减的变量,它应该是:
0 2 3 4 1
以下是我的预期结果:
2 3 4 1
答案 0 :(得分:7)
这不符合您的预期的原因是因为for
循环的工作方式。
for (statement_1; condition; statement_2) {
body;
}
statement_1
仅在循环开始前调用一次。
condition
在循环中每次传递开始时进行评估。如果是,则评估body
。如果不是循环退出。
statement_2
之前, body
在循环中每次传递结束后的<{strong> {/ 1>}之后进行评估。
因此,当condition
递减并返回递减的值时,它只会在每次运行时--var
循环体后实际调用。
这意味着,当for
的一部分时,--var
和var--
对for
循环的行为会产生相同的影响。
要产生您想要的行为,您可以将for循环更改为:
statement_2
答案 1 :(得分:0)
尝试使用以下行。我认为你的for循环不合适。
for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen);
现在它将具有以下输出
2 4
3 3
4 2
1 1