#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;
表达式
答案 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
而不是原始值。代替添加sum
,1
,2
,... 3
,您将添加10
,2
,{{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
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++;
这就是您需要的