This question already has answers here:
Why are these constructs using pre and post-increment undefined behavior?
(14个回答)
6年前关闭。
当我输入下面的代码时:
它给我类似
当我们添加这些值时,即
但是当我像这样编码时:
它给了我输出
有人可以描述此代码背后的过程是什么以及为什么代码输出不同吗?
谢谢!
(14个回答)
6年前关闭。
当我输入下面的代码时:
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
。有人可以描述此代码背后的过程是什么以及为什么代码输出不同吗?
谢谢!
最佳答案
美味的Undefined Behaviour,+
(以及许多其他)的操作数的求值顺序留给实现。因此,第二种情况甚至不总是36
。
关于c - C语言中算术运算的层次结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17379384/