设置变量等于递减变量是否会更改该变量的所有值?

时间:2015-12-16 13:39:23

标签: c postfix-operator

如果您有以下代码:

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的价值?

3 个答案:

答案 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