【问题标题】:Why ++i, i++ are the same in for loop?for 循环在 C (++i, i++) 中不会产生不同的值
【发布时间】:2022-01-12 13:29:34
【问题描述】:
for (int i = 0; i < n+1; ++i)
{
    sum = sum + i;
}

for (int i = 0; i < n+1; i++)
{
    sum = sum + i;
}

由于函数调用参数中的++i和i++,两个段落不同。

但它就像 i 只以 0 开头一样。为什么 ++i 也以 0 开头?

【问题讨论】:

  • "n 函数调用参数" 你的代码中没有函数,你在说什么?
  • @r3mainer 重复错误。在其他语言中,前缀与后缀可能很重要,例如带有运算符重载的 C++。
  • 请创建minimal reproducible example 向我们展示。比如如何初始化变量sum
  • 另请注意,显示的代码中没有函数调用,也没有参数。 for 是一个使用三个(可选)表达式的语句。正如@Lundin 在他的answer 中提到的那样,这两个循环之间绝对没有实际区别。唯一可能的问题是您没有向我们展示的代码(很可能是sum 的初始化,或者可能缺少初始化)。
  • "for 循环在 C 中产生不同的值":不,它不会。你试过这个吗?

标签: c for-loop


【解决方案1】:

这两个sn-ps之间绝对没有区别。 i++++i 仅在与同一表达式中的其他运算符混合时才有意义。大多数时候这是个坏主意,因为i++/++i 有副作用。

【讨论】:

    【解决方案2】:

    一个通用的for 循环

    for (a; b; c)
    {
        d
    }
    

    等价于

    {
        a;
        while (b)
        {
            d;
            c;
        }
    }
    

    注意“增量”表达式c循环体的主要语句之后。

    对于您的循环,这意味着它们将等同于:

    {
        int i = 0;
        while (i < n+1)
        {
            sum = sum + i;
            i++;  // or ++i
        }
    }
    

    由于i 的增量直到您计算sum 之后才发生,因此循环之间没有实际差异。两者都会导致完全相同的结果。


    附带说明:请记住在循环之前将sum 显式初始化为零,否则它可能具有不确定 值(可能被视为垃圾)。

    【讨论】:

      【解决方案3】:

      您发布的两个 for 循环的行为完全相同。它们相等的原因,也回答了为什么两个循环都从 0 开始的问题,是增量(i++++i)只发生在 {表达式之后{} 中的 } 已执行,并且在 次执行后。

      【讨论】:

        【解决方案4】:

        您的代码会产生相同的结果。

        以下代码会产生不同的结果。

        int i = 0;
        while (i < 5) {
          printf("%d\n", ++i);
        }
        // 1
        // 2
        // 3
        // 4
        // 5
        i = 0;
        while (i < 5) {
          printf("%d\n", i++);
        }
        // 0
        // 1
        // 2
        // 3
        // 4
        

        在我的示例中,底部 for 循环打印出 0 而顶部 for 循环不打印的原因是因为 printfi++/++i 形成一个组合表达式,其中顶部 i 递增然后访问从内存中,而在底部循环中i 是从内存中访问,然后递增。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-05
          • 2015-07-05
          • 2011-06-14
          • 2023-02-05
          相关资源
          最近更新 更多