如果您有以下代码:
j=3; // Line 1
i=6; // Line 2
i+=5; // Line 3
j=i--; // Line 4
...据我所知,j
的价值将变为6.如果是--i
,则为5等。
但是,如果我在第4行之后打印出i
的值,我会得到10而不是11,这是第3行。
为什么会这样?这是否意味着如果我将i
声明为数字,稍后我会返回代码并将另一个变量设置为i--
,在代码中的大多数i's
之前,它会更改全球i
的价值?
答案 0 :(得分:4)
在您的代码中,请参阅以下步骤。
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 添加到它)。[....]
和
postfix
--
运算符类似于postfix++
运算符,但值为 操作数递减(即,从中减去适当类型的值1) 它)。
注意,预递减和后递减的差异仅在 表达式中可见。从使用变量的下一条指令的角度来看,它们都会给你相同的结果(效果)。
答案 1 :(得分:2)
首先,您将i
的值变为11
,然后将此值分配给j
,然后 i
的减量发生。最后一行相当于
j = i;
i -= 1;
如果你j = --i;
,那么最后一行将等同于
i -= 1;
j = i;
和j
将成为10
。
答案 2 :(得分:1)
--
递减运算符与减1运算符不同。他们会修改使用它们的左值,因此在任何时候使用i--
时,都会修改i
。