2013-02-13 151 views
-2

答案是90.但是,這是什麼邏輯? 萬一我寫這個j =(4,5); 然後答案是5.有人可以解釋這段代碼的輸出嗎?

#include<stdio.h> 
    void main() 
    { 
     int j; 
     j=(4,5,90); 
     printf("%d\n",j); 
    } 
+2

你認爲它是什麼?你爲什麼寫這個代碼?你想達到什麼目的? – Lundin 2013-02-13 10:52:38

+0

請閱讀以下內容:[逗號運算符](http://en.wikipedia.org/wiki/Comma_o​​perator) – Alex 2013-02-13 10:05:20

回答

8

您正在使用comma operator

在C和C++編程語言中,逗號(令牌表示)是一個二進制運算符,用於評估其第一個操作數並放棄結果,然後評估第二個操作數並返回此值(和類型)。

請注意,這不同於分隔函數參數的逗號。

a = 1, 2, 3; 
    ^^ 
    | | 
    comma operators 

a = foo(1, 2, 3); 
     ^^ 
     | | 
     separators 

爲您的代碼,這意味着所有的情況是,表達式4590被評估一個接一個,並在此結果是最後一個表達式的結果,即90

圓括號只是括號,它們不會以任何方式影響結果。

const int j = (4, 5, 90); 

是一樣的:

const int j = 4, 5, 90; 

或者,對於這個問題:

const int j = (4), (5), (90); 

由於維基百科的頁面我聯繫上指出,應該是從上面明顯,逗號運算符很少有用。它可以被欺騙用於各種模糊目的的服務(參見this page for examples),但做晦澀的事情很少是贏。

+0

逗號用作分隔符而不是運算符。因爲它的優先級低於賦值。 – 2013-02-13 10:07:10

+0

我無法清楚地明白你給了什麼解釋「放鬆」。你能否以更簡單的方式解釋它? – 2013-02-13 10:16:02

+0

@Juna我增加了更多的話,希望現在更清楚。 – unwind 2013-02-13 10:40:51

相關問題