在重复控制语句中使用前增量和后增量有什么区别吗?

时间:2018-12-21 00:57:51

标签: c

#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。我实际上期望得到一个不同的答案。有人可以解释为什么我得到同样的答案。 以及此代码与将post / pre增量放在sum = sum +x;表达式

上方有何不同?

5 个答案:

答案 0 :(得分:3)

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

y1 = x++;

y2 = ++x;

y1将获得x old 值,而y2将获得{{1}的 new 值}。参见What is the difference between i++ and ++i?

由于您没有将表达式的结果分配给任何内容,因此差异与程序无关。如果您写过:

x

您将获得与

不同的结果
sum = sum + ++x;

因为现在您正在使用表达式的值,所以结果很重要。

关于第二个问题,语句按顺序执行。因此,如果将sum = sum + x++; 放在赋值之前,则将++x;的增量值添加到x而不是原始值。代替添加sum12,... 3,您将添加102,{{1} },...,3。如果您输入以下内容,则可以看到这种差异:

4

在分配之前。

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

11

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

相反,

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

相同
sum = sum + ++x;

答案 1 :(得分:1)

C 中,除非您编写复杂的内容,例如for ( int i = 1; sum < bound; sum += i++ )

在带有重载运算符的 C ++ 中,可以存在。 ++instance通常比需要制作临时副本的instance++更有效率。

答案 2 :(得分:0)

#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

答案 3 :(得分:0)

前置增量运算符++x在表达式中使用变量之前先将其值增大。在后置增量运算符x++中,值首先在表达式中使用,然后递增。 如果您想查看差异,可以尝试在printf()++x

的while循环内使用x++
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

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

答案 4 :(得分:-6)

sum=sum + ++x; 
sum=sum + x++;

这就是您需要的