为什么我得到以下输出:4 8 12 16 20
int i, j = 1, k;
for (i = 0; i < 5; i++)
{
k = j++ + ++j;
Console.Write(k + " ");
}
答案 0 :(得分:2)
好吧k = j ++(+)++ j
j ++将增加j的值,但返回预先增加的值 ++ j将递增j的值,然后返回递增的值。
j++ = 2 but really returns (1)
虽然,只要你点击++ j,你就会获得当前为2的j的实际值。
++j = 3
1 + 3 = 4
答案 1 :(得分:2)
我不认为这里的其他答案是正确的。
根据数学排序操作按顺序评估变量。在这种情况下,我们只是添加,因此它们从左到右进行评估。 j++
然后++j
j++ + ++j
j
让我们在循环开始时调用j
的值p
j++
j
评估前递增值(p
),然后j
递增(p+1
)++j
j
递增(p+2
)并评估为后递增值(p+2
)因此,两个评估的数字是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
是函数的参数。函数参数的评估从左到右进行,所以这是我们为循环的每次迭代得到的结果:
j++
会增加j
的值,但会返回原始值。++j
再次增加j
的值并返回新值。+
运算符。例如,当i==0
时,j
最初为1
。然后执行j++
,将j
设置为2
,然后返回1
。然后++j
将j
增加到3
,然后返回3
。因此,加法变为1 + 3
,结果为k = 4
。
答案 3 :(得分:1)
j++
递增j的值,但返回预递增的值。++j
递增j的值,但返回递增的值。