C中算术运算的层次结构

时间:2013-06-29 10:46:35

标签: c hierarchy

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

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 =10d= 12e=13等输出 当我们添加这些值时,即10+12+13变为35, 但是当我把它编码为:

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

它为我提供了输出36

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Delicious Undefined Behaviour+(以及许多其他操作数)的操作数的评估顺序留给实现。因此,对于第二种情况,它甚至不总是36

答案 2 :(得分:-1)

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