2012-03-21 57 views
-5

爲什麼我得到以下輸出:4 8 12 16 20爲什麼這是以下循環的輸出?

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

請閱讀增量運算符及其對錶達式的影響,具體取決於它的位置。 – 2012-03-21 00:42:52

+1

你期待什麼產出?爲什麼? – 2012-03-21 00:42:54

+0

這是一個真正的問題嗎?我的意思是,如果你已經使用了前後增量操作符,那麼你必須知道他們做對了什麼? – EdChum 2012-03-21 00:47:02

回答

2

我不認爲其他這裏的答案是正確的。

根據數學排序操作按順序評估變量。在這種情況下,我們只是添加,所以他們從左到右進行評估。 j++然後++j

j++ + ++j 
  1. j          讓我們把在循環p
  2. j++   j評估爲增量前值(p)開始的j值,然後j遞增(p+1
  3. ++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

那麼K = J ++(+)++Ĵ

J ++將遞增j的值,但返回預遞增值。
++ j將遞增j的值,然後返回遞增的值。

j++ = 2 but really returns (1) 

雖然,只要你打++Ĵ,你incrimenting j的真正價值目前爲2

++j = 3 

1 + 3 = 4 

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

+0

你的解釋的第二部分來自哪裏?你說得對,'j ++ = 1',那麼你爲什麼繼續說'j ++ = 2'只是因爲後面跟着一個'++ j'。 – 2012-03-21 01:05:25

+0

謝謝你是對的。我糾正了隊友心態提升-1? – 2012-03-21 01:39:26

1

在C#,+運算只是一個函數,在你的情況下,j++++j是該函數的參數。函數參數進行評估,從左至右,所以這裏是我們得到了循環的每個迭代:

  1. j++增量j值,但返回原來的價值。
  2. ++j遞增值j再次並返回新值。
  3. +運算符用(1)和(2)的結果調用。

例如,當i==0,j最初是1。然後執行j++,將j設置爲2,並返回1。然後++j遞增j3,並返回3。所以增加成爲1 + 3,導致k = 4

1
  • j++遞增j的值,但返回預增值的值。
  • ++j遞增j的值,但返回遞增的值。