2014-01-29 67 views
1
#include <stdio.h> 

    int main() 
    { 
     int x = 0; 

     if (x++) 
      printf("true\n"); 
     else if (x == 1) 
      printf("false\n"); 
     return 0; 
    } 

輸出:增量操作符在if語句中如何工作?

false 

爲什麼輸出假的?

x++是後增量;這意味着使用x的值,然後遞增。 如果是這樣,則應使用x=0,答案應爲真。

+2

因爲嘗試'++ x',你就會知道。 – Maroun

+0

有一次,這被標記爲[Post-increment operator behavior](http:// stackoverflow。com/questions/98242/post-increment-operator-behavior)但是(正如我在2014年4月在我已經刪除的評論中指出的那樣),重複的內容是關於使用'i'和'+ + i'在函數調用的兩個參數中 - 這不是一個很好的匹配或這個問題,因此(即使標題是一個很好的匹配)。這個問題沒有未定義的行爲。 –

回答

6

在C中,0被視爲false。在x++,的x值,即,在0表達式中使用,並且變得

if(0) // It is false 
    printf("true\n"); 

if主體沒有得到執行。之後x現在是1。現在檢查else if中的條件,即x == 1。因爲x1,所以該條件評估爲true,因此其身體得到執行並且打印"false"

3

後遞增意味着它返回當前值(在這種情況下爲if)並在之後遞增。它相當於

if(x) { 
    x++; 
    // ... 
} else { 
    x++; 
    // ... 
} 
1

0是假的C.你正在使用的後增運營商。

1

您自己寫道: 「X ++是後遞增,這意味着x的值被使用,那麼它遞增

想想這意味着什麼:

  1. x是0

  2. 評估表達式,0爲false,因此表達式爲false。

  3. 增量情況發生,改變x從01
    (表達進行評價後)

2

0相當於C.假如使用的是遞增運算符,條件增量之前評估所以x爲假並且從不執​​行printf("true\n");。然後去else併成功評估x == 1,然後打印false。

作爲一種良好的做法,儘量避免在條件句中進行分配。