爲什麼我得到以下輸出:4 8 12 16 20爲什麼這是以下循環的輸出?
int i, j = 1, k;
for (i = 0; i < 5; i++)
{
k = j++ + ++j;
Console.Write(k + " ");
}
爲什麼我得到以下輸出:4 8 12 16 20爲什麼這是以下循環的輸出?
int i, j = 1, k;
for (i = 0; i < 5; i++)
{
k = j++ + ++j;
Console.Write(k + " ");
}
我不認爲其他這裏的答案是正確的。
根據數學排序操作按順序評估變量。在這種情況下,我們只是添加,所以他們從左到右進行評估。 j++
然後++j
j++ + ++j
j
讓我們把在循環p
j++
j
評估爲增量前值(p
)開始的j
值,然後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
那麼K = J ++(+)++Ĵ
J ++將遞增j的值,但返回預遞增值。
++ j將遞增j的值,然後返回遞增的值。
j++ = 2 but really returns (1)
雖然,只要你打++Ĵ,你incrimenting j的真正價值目前爲2
++j = 3
1 + 3 = 4
你的解釋的第二部分來自哪裏?你說得對,'j ++ = 1',那麼你爲什麼繼續說'j ++ = 2'只是因爲後面跟着一個'++ j'。 – 2012-03-21 01:05:25
謝謝你是對的。我糾正了隊友心態提升-1? – 2012-03-21 01:39:26
在C#,+運算只是一個函數,在你的情況下,j++
和++j
是該函數的參數。函數參數進行評估,從左至右,所以這裏是我們得到了循環的每個迭代:
j++
增量j
值,但返回原來的價值。++j
遞增值j
再次並返回新值。+
運算符用(1)和(2)的結果調用。例如,當i==0
,j
最初是1
。然後執行j++
,將j
設置爲2
,並返回1
。然後++j
遞增j
至3
,並返回3
。所以增加成爲1 + 3
,導致k = 4
。
j++
遞增j的值,但返回預增值的值。++j
遞增j的值,但返回遞增的值。
請閱讀增量運算符及其對錶達式的影響,具體取決於它的位置。 – 2012-03-21 00:42:52
你期待什麼產出?爲什麼? – 2012-03-21 00:42:54
這是一個真正的問題嗎?我的意思是,如果你已經使用了前後增量操作符,那麼你必須知道他們做對了什麼? – EdChum 2012-03-21 00:47:02