首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带递减算子的奇异行为

问带递减算子的奇异行为
EN

Stack Overflow用户
提问于 2016-09-08 09:27:58
回答 2查看 179关注 0票数 1

我的代码是用来反向打印数组的,但是由于某种原因,减量操作符没有像预期的那样工作。根据我的理解,在对变量进行任何操作之前,--var会减少变量var,而var--会在操作完成后减少变量var,比如for循环。

这是我的代码:

代码语言:javascript
复制
#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;
}

下面是我的结果(输出中的正确值是递减变量,我将其添加到检查中):

代码语言:javascript
复制
0 4
2 3
3 2
4 1
1 0

如果没有打印递减变量,则应该是:

0 2 3 4 1

以下是我的预期结果:

2 3 4 1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 09:31:03

之所以没有像您预期的那样行事,是因为for循环是如何工作的。

代码语言:javascript
复制
for (statement_1; condition; statement_2) {
    body;
}

在循环开始之前,只调用一次statement_1。

condition在循环中每一次传递的开始处进行评估。如果为真,则对body进行计算。如果不是,则循环退出。

在循环中每一次传递结束时,就在重新评估statement_2之前,在 body之后对condition进行评估。

因此,当--var执行减量并返回递减值时,实际上只在每次运行for循环的主体之后调用它。

这意味着当--var和var--成为statement_2的一部分时,对for循环的行为也会产生同样的影响。

要产生您想要的行为,可以将for循环更改为:

代码语言:javascript
复制
while (--arrLen >= 0)
    printf("%d %d\n", arr[arrLen], arrLen);
票数 7
EN

Stack Overflow用户

发布于 2016-09-08 09:47:07

试着用下面的一行。我觉得你的for循环不合适。

代码语言:javascript
复制
for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen);

现在它将具有以下输出

代码语言:javascript
复制
2 4
3 3
4 2
1 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39387269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档