当我输入我的代码时,如下所示:
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= 12
,e=13
等输出
当我们添加这些值时,即10+12+13
变为35
,
但是当我把它编码为:
b = a++ + ++a + ++a;
printf("value of b=%d" ,b);
它为我提供了输出36
。
有人可以描述这段代码背后的过程以及代码输出为何不同? 谢谢!
答案 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);
答案 1 :(得分:0)
Delicious Undefined Behaviour,+
(以及许多其他操作数)的操作数的评估顺序留给实现。因此,对于第二种情况,它甚至不总是36
。
答案 2 :(得分:-1)
它们之间的区别是第二个表达式还没有以++结束,而是添加了一些其他值,这就是为什么a ++是11而不是10