为什么这是以下循环的输出?

时间:2012-03-21 00:40:05

标签: c#

为什么我得到以下输出:4 8 12 16 20

int i, j = 1, k;
  for (i = 0; i < 5; i++)
  {
     k = j++ + ++j;
     Console.Write(k + " ");
  }

4 个答案:

答案 0 :(得分:2)

好吧k = j ++(+)++ j

j ++将增加j的值,但返回预先增加的值 ++ j将递增j的值,然后返回递增的值。

j++ = 2 but really returns (1)

虽然,只要你点击++ j,你就会获得当前为2的j的实际值。

++j = 3

1 + 3 = 4

What is the difference between ++i and i++?

答案 1 :(得分:2)

我不认为这里的其他答案是正确的。

根据数学排序操作按顺序评估变量。在这种情况下,我们只是添加,因此它们从左到右进行评估。 j++然后++j

j++ + ++j
  1. j让我们在循环开始时调用j的值p
  2. j++ j评估前递增值(p),然后j递增(p+1
  3. ++j j递增(p+2)并评估为后递增值(p+2
  4. 因此,两个评估的数字是p + p+2

    i  initial j  j++ + ++j   k   j
    ================================
    0      1       1  +  3    4   3
    1      3       3  +  5    8   5
    2      5       5  +  7   12   7
    3      7       7  +  9   16   9
    4      9       9  + 11   20  11
    

答案 2 :(得分:1)

在C#中,+运算符只是一个函数,在您的情况下,j++++j是函数的参数。函数参数的评估从左到右进行,所以这是我们为循环的每次迭代得到的结果:

  1. j++会增加j的值,但会返回原始值。
  2. ++j再次增加j 的值并返回新值。
  3. 使用(1)和(2)的结果调用+运算符。
  4. 例如,当i==0时,j最初为1。然后执行j++,将j设置为2,然后返回1。然后++jj增加到3,然后返回3。因此,加法变为1 + 3,结果为k = 4

答案 3 :(得分:1)

  • j++递增j的值,但返回预递增的值。
  • ++j递增j的值,但返回递增的值。