2015-11-02 73 views
-14

請向我解釋此代碼的結果。後增量和增量前置運算符

//代碼a 當我在我的筆記本電腦上運行此代碼時,y的值爲4.我認爲,y的邏輯值應該爲5,因爲通過執行x ++它應該返回2而不遞增,因爲它是後增量然後當我們添加現在包含增加值的x時,即3。所以2 + 3是5,根據我。但根據我的Turbo C++ 3.0答案是4.

#include <stdio.h> 

void main() 

{ 

    int x = 2,y; 

    **int y = x++ + x;**   // ans 4 

    printf("y is :%d", y); 
} 

//代碼B 當運行該代碼,答案是6。這裏渦輪C++ ++在x被拾取x的遞增的值++ 3.0,這與上述代碼相反。邏輯上來說,答案是正確的,但在上面的代碼中沒有。 的#include

void main() 

{ 

    int x = 2,y; 

    **int y = x++ + ++x;**  //and 6 

    printf("y is :%d", y); 
} 
+0

你運行它並找出?你是否運行它我是一個調試器?什麼讓你困惑? – abligh

+0

分配這個練習的老師的重點是讓你通過研究操作員順序和優先級的規則自行計算出來。讓我們向你解釋它會擊敗目標。 – Barmar

+0

請參閱https://en.wikipedia.org/wiki/Comma_o​​perator –

回答

0
  1. 第一程序,其中所述的結果是4

    #include <stdio.h> 
    
    void main() { 
    int x = 2,y; 
    **int y = x++ + x;   // x=2, so y=2+2=4 
    printf("y is :%d", y); // after post increment x=3 
    } 
    

由於變量僅被它僅語句的執行後發佈遞增的值完成這樣ÿ = 2 + 2

  1. Seco第二程序,其中所述結果是++操作者6.

    關聯性是「從右至左」

    void main() { 
        int x = 2,y; 
        **int y = x++ + ++x; //Since associativity is left to right so y=3+3=6 
        printf("y is :%d", y);// after the post increment x=4 
    } 
    

下面是因爲因爲這樣Y =的關聯規則首先進行預增量3 + 3

0

首先,賦值運算符是從右=作品留下,這意味着如果你寫x = 2 + 4 + 1;編譯器開始從最右邊的數字是1閱讀它然後將其添加到4它等和T如果它將該值賦予x

所以,在你的case語句y = x++ + x;編譯器開始從正確的,是它第一次看到x2然後看到x++即也2,因爲它是後增量運算終於添加它們,並分配y2 + 24看到它。

在第二種情況下,即y = x++ + ++x;,編譯器首先着眼於++x並且因爲它是預增量運算它增加x一個,現在即x3。此後x++看出以上,因爲它是交操作者將被視爲在該操作x如所述的並且該值是3(記住我們通過一個較早遞增x),因此,編譯器分配3 + 36y