2015-10-05 66 views
-2

我學習C語言編程,目前約operators.I'm從sometimes.please問題有點困惑有一個在圖像image1c的輸出是怎樣的53?

的程序是:

#include<stdio.h> 
int main() 
{ 
    int a=9,b=5,c; 
    c=a*b++ + --a; 
    printf("%d",c); 
    return 0; 
} 


我想輸出應該是但它顯示。因爲 - 具有更高的優先級,所以它應該首先被評估,然後在增量之後進行評估,這樣在語句終止之後b的值將被改變。我如果我錯了)。
請幫助。提前預約。

+1

優先確實在C.不等於評估順序例如,編譯器可能決定首先增加'a',然後評估'a'的兩個實例。 – fuz

+0

我沒有得到你所說的請詳細說明。 –

+1

你從推斷評估順序的推理是錯誤的。優先級僅告訴編譯器在何處放置圓括號,它並不告訴編譯器以何種順序來評估事物。 – fuz

回答

1

這是未指定行爲的經典案例。這裏沒有規定首先應該評估加號運算符的哪一邊。

如果首先評估+的左側,則會得到53,因爲--aa*b++之後執行。

如果+運營商的右側先求值,那麼你得到48作爲a--執行首次減少a8然後a*b++得到執行產生40

因此,它取決於編譯器實現首先評估哪一方,因此它可以在不同的編譯器上產生不同的答案。

你可以閱讀更多的關於未指定的行爲here

0

是奇怪!但是對於你的編譯器正在做什麼來說,這是一個可能的場景

int a=9,b=5,c; 
/* 
c=a*b++ + --a; // 

*/ 

c =(a * b)++; //乘法然後加法;

編譯器使用(a * b)的溫度結果然後遞增tmp結果(現在無效),結果仍然是45;

然後被其添加到最終結果之前遞減

C = 45 +(9-1)= 45 + 8 = 53