我的代码是为了打印反向的数组,但由于某种原因,如预期的那样减运算符不能正常工作.根据我的理解--var,var在完成操作之前递减变量,然后在完成操作(例如循环)之后var--递减变量.varfor
这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的结果(输出中的正确值是递减的变量,我添加它来检查):
0 4
2 3
3 2
4 1
1 0
Run Code Online (Sandbox Code Playgroud)
如果没有打印的递减变量,它应该是:
0 2 3 4 1
以下是我的预期结果:
2 3 4 1
这不符合您的预期的原因是因为for循环如何工作.
for (statement_1; condition; statement_2) {
body;
}
Run Code Online (Sandbox Code Playgroud)
statement_1 在循环开始之前只调用一次.
condition在循环中每次传递开始时进行评估.如果是,body则进行评估.如果不是,循环退出.
statement_2评估后的body循环中在各端通过刚刚重新评估之前,condition.
因此,--var虽然递减并返回递减的值,但它实际上只在for每次运行时在循环体之后调用.
这意味着,--var和var--将有一个行为同样的效果for环路时部分statement_2.
要产生您想要的行为,您可以将for循环更改为:
while (--arrLen >= 0)
printf("%d %d\n", arr[arrLen], arrLen);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |