-1

当我输入我的代码时,如下所示:

int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

它给了我一个类似c =10,的输出d= 12e=13 当我们添加这些值时,即10+12+13变为 35,但是当我编码它时:

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

它给了我输出36

有人可以描述这段代码背后的过程以及为什么代码的输出不同吗?谢谢!

4

3 回答 3

0
int a=10,b,c,d,e;
c= a++;
d = ++a;
e = ++a;
printf("value of c=%d, d =%d, e=%d",c,d,e);

在语句c = a++中,首先使用 的值a(即10),然后递增到11
语句d = ++a首先递增a(即12现在),然后使用它的值在printf()语句中打印。
e = ++a.

你的第二个片段

b = a++ + ++a + ++a;
printf("value of b=%d" ,b);

导致未定义的行为(http://en.wikipedia.org/wiki/Undefined_behavior

于 2013-06-29T10:51:24.877 回答
0

美味的未定义行为,(和许多其他)操作数的评估顺序+留给实现。因此,36对于第二种情况甚至并不总是如此。

于 2013-06-29T10:52:29.210 回答
-1

它们之间的区别是第二个表达式没有以 a++ 结尾,还添加了一些其他值,这就是为什么 a++ 是 11,而不是 10

于 2013-06-29T10:51:07.883 回答