#include<stdio.h>
int main()
{
int x=10,y=12;
printf("%d",(x,y));
return 0;
}
該程序的輸出是12.如何?無法理解C的輸出progaram
#include<stdio.h>
int main()
{
int x=10,y=12;
printf("%d",(x,y));
return 0;
}
該程序的輸出是12.如何?無法理解C的輸出progaram
表達你正在評估是:
x,y
該表達式使用逗號操作符。標準(6.5.17逗號運算符)表示:
逗號操作者的左操作數作爲空隙表達式求值;在它的評估和右操作數的評估之間有一個 序列點。然後評估右邊的 操作數;結果有它的類型和價值。
所以,在你的代碼,x,y
計算爲y
,其中有12
值。
如需更廣泛的討論,我可以參考cppreference.com。雖然,討論C++,這個操作符的討論是C.你的問題特別相關的上下文中有效的本節:
各種逗號分隔的列表,如函數參數列表中的逗號(
f(a, b, c)
) ,初始化程序列表int a[] = {1,2,3}
或初始化語句(int i, j;
)不是逗號運算符。如果逗號運算符需要在該上下文中使用,則必須加上括號:f(a, (n++, n+b), c)
。
而這正是你問題中的情況。如果你這樣寫:
printf("%d", x, y);
那麼就沒有用逗號,而你會提供一個更參數printf
比格式說明。
這是因爲首先評估(x,y)。
inside()表達式是x,y它們從左到右計算,因爲Comma
運算符的關聯性爲left to right
,所以評估(x,y)的最後一個值是y。
閱讀operator precedence and associativity rule
和表達是如何在運算符優先級評估,以瞭解這些類型的表達式
你能提供任何鏈接讀取運算符優先級和關聯性規則? –
@ user3416257你只是想要表,然後檢查[this](http://n.ethz.ch/~werdemic/download/week3/C++%20Precedence.html)或[this](http://msdn.microsoft.com /en-us/library/2bxt6kc4.aspx)。也要經過一些表達評估的例子。 – LearningC
你使用comma operator機會。
在C和C++編程語言中,逗號運算(由令牌,
表示)是一個二進制運算符,用於評估其第一操作數和丟棄結果,然後計算第二個操作數並返回該值(和類型)。
這就是說,
printf("%d",(x,y));
在功能上等同於
printf("%d", y);
你期望它做什麼,爲什麼? – SLaks
你期望它是什麼?爲什麼? (哇 - 奴隸 - 我發誓這不是故意的) –
相關:[在C中使用逗號運算符](http://stackoverflow.com/questions/18666095/using-comma-operator-in-c) – WhozCraig