如果x = 3
和 z 未分配,
为什么z = x-- - --x
评估为 2?
我的教授目前正在讲课,而我目前陷入了困境。不幸的是,没有人能解释为什么会这样。
在 x-- 上,x = 3,然后是 2。在 --x 上,x = 1,因为减法(从 2 开始)是事先完成的。
因此,3 - 1 = 2。
这是操作的顺序,为了更好地理解而进行了说明:
-- prefix
表示在计算表达式之前进行递减,postfix --
表示在计算表达式后进行递减。
好的,它很简单:
让我们添加括号:
z = ( x-- ) - ( --x )
^^ 这就是编译器在标记化后如何看待您的代码。
编译器从左到右评估方程(右部分)
现在,
x--
等于弹出 x 的值,然后将其递减并将值推回内存中。好的,让我们一起做:
X 的当前值为 3,递减为 2 - 因此,在等式中我们将得到 3,但 X 将包含新值 2。
--x
等于递减X值,然后将该值POP到方程中。我们开始做吧:
X 的当前值为 2(因为之前的操作减少了它),现在我们想再次减少它。2-1 = 1,明白了。
现在,回到整个方程:z = (3) - (1) = 2
。