2013-10-13 15 views
1

如何此代碼的工作。在這裏i變量得到55價值的分配。但爲什麼,因爲我得到550,這裏else語句的if語句失敗executed.How這種解釋發生 。 如我所料outputTest Skills 55但它沒有。分配是如何在下面的代碼分配給if條件

#include<stdio.h> 
void main() 
{ 
    int i; 
    i=0; 
    if(i=55,0,10,0) 
    printf("Test Skills %d",i); 
    else 
    printf("C Programing %d",i); 

} 

任何人都可以解釋它在上面的代碼中的行爲嗎?

+3

請避免這種晦澀難懂的語法。如果不是你寫它,放棄源代碼 - 當然,除非它是關於混淆的代碼。 –

回答

3

逗號表達

exp1, exp2 

其中exp1exp2是任何兩個表達式。這將分兩步進行評估:

  1. exp1被評估並且其值被丟棄。
  2. exp2被評估,它的值是整個表達式的值。

注:評估exp1應該始終有一個副作用;如果沒有,那麼exp1不起作用

在你的情況

if(i=55,0,10,0) 

​​第一評價和它的值被丟棄(但副作用i已經完成,即,55被分配給i)。 0評估然後丟棄。 10評估然後丟棄。然後在最右側0進行評估,它將在if條件下的整個表達式((但不包括子表達式的值))的值,並使條件爲假
i的副作用已完成,這就是爲什麼你的輸出爲55

+0

你可能意思是最右邊的。 – Kninnug

0

,運算符從左到右執行。所以最後的值是0,這使得if爲false。

if(i=55,0,10,0) => if(i,0,10,0) => if(55,0,10,0) => if(0) => which returns false 
            ^^^^-> Value of i 

i仍然是55,因爲,優先級最低。

,運算符執行它的左表達式並作爲,運算符的結果返回右表達式的結果。

此處需要注意的其他事項是賦值運算符的優先級高於,。這就是爲什麼i得到價值55

+0

然後,如果語句從R-> L執行,則i = 55打印 –

+0

=具有高優先級,然後 – Arpit

+0

@vinayhunachyal您的示例與OPs問題不匹配。在OPs代碼中圍繞'55,0,10,0'沒有括號 – exexzian

0

逗號運算符從左到右。

您有值:55,0,10,0和最右邊的值是0這意味着false

另外賦值運算符的優先級高於逗號,所以i設置爲55

相關問題