【问题标题】:Is there any difference in using pre increment and post increment in repetition control statements?在重复控制语句中使用前增量和后增量有什么区别吗?
【发布时间】:2018-12-21 00:57:51
【问题描述】:
#include <stdio.h>

int main(void){
  int sum , x;
  x = 1;
  sum = 0;

  while(x <= 10){
    sum = sum + x;
    ++x;
   }

  printf("The sum is: %d\n", sum);
  return 0;
}

我正在学习 C 并使用后增量和前增量语句整理一些示例。在此示例中,输出为 55。当我使用后增量 x++; 时,我也得到 55。我实际上期待得到不同的答案。有人可以解释为什么我得到相同的答案。 这段代码与将后/前增量放在sum = sum +x; 表达式上方有何不同

【问题讨论】:

  • 不把结果赋值给任何地方都没有区别。
  • 通常,与 x++ 相比,执行 ++x 所需的指令更少。但是,使用地点/方式的情况也会影响最终的效率
  • x++;和 ++x 具有相同的副作用。唯一的区别是它们的评估结果(即增量之前的 x 或增量之后的 x)。如果你把这个值扔掉,那就没有区别了。该标准规定表达式语句(例如++x;)和for 中的最后一个表达式被评估为void 表达式。这意味着该值被丢弃,然后没有区别。

标签: c


【解决方案1】:

x++++x 都将 1 添加到 x。它们之间的唯一区别是表达式本身的值,例如如果你这样做:

y1 = x++;

y2 = ++x;

y1 将获得x 值,而y2 将获得x 值。见What is the difference between i++ and ++i?

由于您没有将表达式的结果分配给任何东西,因此差异在您的程序中是无关紧要的。如果你写了:

sum = sum + ++x;

你会得到不同的结果

sum = sum + x++;

因为现在你使用表达式的值,结果很重要。

关于你的第二个问题,语句是按顺序执行的。因此,如果您将++x; 放在赋值之前,那么您将添加x 的增量值到sum,而不是原始值。不要添加123、...10,而是添加234、...、11。如果您输入以下内容,您可以看到这种差异:

printf("Adding %d + %d\n", sum, x);

在分配之前。

在赋值之前或之后放置增量语句类似于在赋值本身中使用增量表达式,并在前增量和后增量之间进行选择。即

++x; // or x++;
sum = sum + x;

一样
sum = sum + ++x;

反之,

sum = sum + x;
++x; // or x++;

一样
sum = sum + x++;

【讨论】:

    【解决方案2】:

    C中,除非你写一些复杂的东西,比如for ( int i = 1; sum &lt; bound; sum += i++ )

    在带有重载运算符的C++中,可以有。 ++instance 一般比instance++ 效率高,需要临时复制。

    【讨论】:

      【解决方案3】:
      #include<stdio.h>
      
      int main() {
          int x = 5;
          int y = x++;
          int z = ++x;
          printf("%d, %d, %d\n", x, y, z);
      }
      

      返回

      7, 5, 7
      

      它们都增加 x。不同的是返回的值。

      ++x 在增量之前返回 x

      x++ 在增量后返回 x

      【讨论】:

        【解决方案4】:

        前自增运算符++x在表达式中使用变量之前增加它的值。在后自增运算符x++中,值首先在表达式中使用,然后递增。 如果你想看看区别,你可以尝试在++xx++的while循环中使用printf()

        while(x <= 10){
            sum = sum + x;
            printf("The sum is: %d\n", ++x);
        }
        

        这将从数字 2 到 11

        打印
        while(x <= 10){
            sum = sum + x;
            printf("The sum is: %d\n", x++);
        }
        

        这将从 1 到 10

        打印

        另一个区别是优先级和关联性。 后缀++的优先级大于前缀++后缀++的关联性是从左到右,前缀++的关联性是从右到左。

        【讨论】:

          【解决方案5】:
          sum=sum + ++x; 
          sum=sum + x++;
          

          这就是你需要的

          【讨论】:

          • 他为什么需要这个?他问了一个关于它是如何工作的问题,而不是如何获得特定的结果。
          • 只有在这种情况下,sum的值是不同的,sum = sum + x没有区别;然后调用 x++or++x
          猜你喜欢
          • 2013-06-26
          • 2014-12-09
          • 1970-01-01
          • 2019-04-28
          • 2021-05-05
          • 2011-01-02
          • 2016-02-02
          • 1970-01-01
          • 2015-12-21
          相关资源
          最近更新 更多