C语言中,求a++ + ++a + a++ + ++a的值,a=10,请高手讲解一下具体运算过程,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:23:18
谢谢各位的讲解,你们的计算过程我知道,就是搞不懂为什么VC给出的答案是45!!!不是48!!

10 + 12 + 12 + 14 = 48
我也写了下,确实是45。下面是编译产生的汇编代码:

movl $10, -12(%ebp) ; -12(%ebp) indicate a here.
17 addl $1, -12(%ebp)
18 movl -12(%ebp), %eax
19 addl -12(%ebp), %eax
20 addl -12(%ebp), %eax
21 addl $1, -12(%ebp)
22 addl -12(%ebp), %eax
23 movl %eax, -8(%ebp)
24 addl $1, -12(%ebp)
25 addl $1, -12(%ebp)

eax 和 ebp-12 的变化过程如下
eax ebp-12
NIL 10
11 10+1
22 11
33 11+1
45 12
45 13
45 14
可以看到,初始的时候用11加了三次,最后一次加的是12
所以得到45。是编译器优化的结果。

所以,最后a是14,和为45
上面的人们,别那么武断的下结论。因为错误就往往出现在武断中。
楼主的表达式是下面这个意思:
(a++)+(++a)+(a++)+(++a)。依旧是45

10 + 14 + 10 + 14=48

结果就是48,不同的编译工具对符号的优先运算不同 ,这就导致结果不同,非常同意6楼的意见,这么写的人,要么脑子病的不轻,要么他是个极BT的人民教师.

这位同学
好言相劝一句:人生不是浪费在这些无聊的问题上的。

毫无意义的问题,有空多看看其他语法吧。

a=10,++a=11,a++ +