使用递减运算符

时间:2016-09-08 09:27:59

标签: c++

我的代码是为了反向打印一个数组,但由于某种原因,减量运算符没有按预期工作。根据我的理解--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

2 个答案:

答案 0 :(得分:7)

这不符合您的预期的原因是因为for循环的工作方式。

for (statement_1; condition; statement_2) {
    body;
}

statement_1仅在循环开始前调用一次。

condition在循环中每次传递开始时进行评估。如果是,则评估body。如果不是循环退出。

在重新评估statement_2之前,

body在循环中每次传递结束后的<{strong> {/ 1>}之后进行评估。

因此,当condition递减并返回递减的值时,它只会在每次运行时--var循环体后实际调用。

这意味着,当for的一部分时,--varvar--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