如果您有以下代码:
j=3; // Line 1
i=6; // Line 2
i+=5; // Line 3
j=i--; // Line 4
...据我所知, 的值j
将变为 6。如果是--i
,则为 5 等等。
但是如果我打印出第i
4 行之后的值,我会得到 10 而不是第 3 行的 11。
为什么会这样?这是否意味着如果我声明i
为一个数字,然后我返回代码并将另一个变量设置为i--
,在我的大部分i's
代码之前,它会更改i
全局的值?
如果您有以下代码:
j=3; // Line 1
i=6; // Line 2
i+=5; // Line 3
j=i--; // Line 4
...据我所知, 的值j
将变为 6。如果是--i
,则为 5 等等。
但是如果我打印出第i
4 行之后的值,我会得到 10 而不是第 3 行的 11。
为什么会这样?这是否意味着如果我声明i
为一个数字,然后我返回代码并将另一个变量设置为i--
,在我的大部分i's
代码之前,它会更改i
全局的值?
在您的代码中,请参阅以下步骤。
j=3; //Line 1, j ==3
i=6; //Line 2, i == 6
i+=5; //Line 3, i == i + 5 == 11
j=i--; // line 4, j == 11, i == 10, after this line.
详细地说,x += y
可以分解为x = x + y
,就是这样。
并且关于后减量,副作用(减量)将在计算表达式后发生。因此,无论如何,在下一条语句之前, 的值i
将递减。
要添加一些参考,来自C11
第 §6.5.2.4 章,
后缀
++
运算符的结果是操作数的值。作为副作用,操作数对象的值会递增(即,将相应类型的值 1 添加到其中)。 [....]
和
后缀
--
运算符类似于后缀++
运算符,不同之处在于操作数的值是递减的(即从它减去相应类型的值 1)。
请注意,前减量和后减量的差异仅在使用它们的表达式中可见。从使用变量的下一条指令的角度来看,它们都会给你相同的结果(效果)。
首先,您设置i
become的值11
,然后将此值分配给j
,然后减少i
发生。最后一行相当于
j = i;
i -= 1;
如果你这样做了,j = --i;
那么最后一行将相当于
i -= 1;
j = i;
并且j
会变成10
.
减法运算符与--
减一不同。它们修改了使用它们的左值,因此任何时间i--
都i
将被修改。