【问题标题】:Does setting a variable equal to a decrementing variable change all values of that variable? [closed]将变量设置为等于递减变量是否会更改该变量的所有值? [关闭]
【发布时间】:2015-12-16 13:39:23
【问题描述】:

如果你有以下代码:

j=3;   // Line 1
i=6;   // Line 2
i+=5;  // Line 3
j=i--; // Line 4

...据我所知,j 的值将变为 6。如果是 --i,则为 5,以此类推。

但是如果我在第 4 行之后打印出 i 的值,我会得到 10 而不是第 3 行的 11。

为什么会这样?这是否意味着如果我将i 声明为一个数字,然后我返回代码并将另一个变量设置为i--,在代码中的大部分i's 之前,它会全局更改i 的值?

【问题讨论】:

  • "但是如果我在第 4 行之后打印出 i 的值,我会得到 10 而不是第 3 行中的 11。为什么会发生这种情况?"因为第 4 行将值减 1。
  • @WalterM - 最好不要链接为重复的不同语言。
  • @WalterM:那个重复是一种不同的语言,由于顺序考虑,操作符的细微差别会有所不同。
  • 这是C equivalent。虽然我不明白这是如何重复的。操作员似乎甚至不知道 i-- 开始做什么。

标签: c postfix-operator


【解决方案1】:

在您的代码中,请参阅以下步骤。

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 它)。

注意,前减量和后减量的区别仅在使用它们的表达式可见。从下一条指令使用变量的角度来看,它们都会给你相同的结果(效果)。

【讨论】:

  • @Downvoter,这对我来说是正确的。大概是回答者和我错过了什么?
  • @Bathsheba 如果你得到什么,请告诉我,可能我也错过了。 :)
  • @Bathsheba 我讨厌开车经过的匿名投票者!投票支持恢复平衡。
  • @Ike 虽然我应该高兴(其实我是),但我想礼貌地提醒你,你应该根据内容投票,而不是恢复平衡。谢谢你并应用它。 :)
  • @SouravGhosh 我正在对内容进行投票——同时也是为了恢复平衡。 :-D 另外,我个人也很喜欢你的帽子。
【解决方案2】:

首先将i 的值变为11,然后将此值分配给j然后发生i 的递减。最后一行相当于

j = i;
i -= 1;

如果你做了j = --i;,那么最后一行就相当于

i -= 1;
j = i;

j 会变成10

【讨论】:

    【解决方案3】:

    -- 减法运算符与减一不同。它们会修改使用它们的左值,因此任何时候使用i--,都会修改i

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2012-12-14
      • 2021-06-17
      相关资源
      最近更新 更多