4
A
回答
12
從第一組圓括號開始讀取。
逗號運算符隨後評估幾個表達式中的每一個。它返回最後一個表達式的返回值 - 在本例中,它是32,因爲賦值的返回值是分配的值。
4
int i=(j=4,k=8,l=16,m=32); printf(「%d」, i); // Will give you 32
int i=(j=4,k=8,l=16); printf(「%d」, i); // Will give you 16
int i=(j=4,k=8,l=16,m=32,n=64); printf(「%d」, i); // Will give you 64
看到這個模式?
基本上,i
被設置爲無論大括號中最後一個賦值的值是多少,因爲,
運算符將按順序評估每個賦值,但會返回上述情況中最後一次賦值的值。
更一般地,,
運算符(comma operator)將按順序評估一系列表達式並返回最後一個表達式的值。因此,在您的情況下,i
正被賦予大括號中最後一個賦值的值(因爲賦值的返回值是正在賦值的值),即爲32.
4
comma operator爲左關聯。
它評估,隨後通過j=4
k=8
,隨後l=16
最後m=32
並返回32.因此,我得到的32
值。
2
換句話說,括號中的任何內容首先從左到右進行評估;和最右邊的表達式返回作爲支架的輸出結果INT I得到十進制值32
0
不是一個真正的「答案」,但應該指出的是,主要使用逗號運算符將在多個語句無效的上下文中依次評估帶有副作用的表達式,如函數調用,賦值等。最重要的用途是在你希望整個宏「返回一個值」但執行多個操作的宏中。唯一的其他方法是使用gcc ({ /* multiple statements here */ })
擴展名或讓宏只需調用static
/static inline
函數。
另一個經常使用我覺得逗號操作符與for
聲明:
for (n=cnt; n; n--, d++, s++)
,當我有一個if
語句需要做兩個緊密相連的操作,我不想要的視覺括號的雜波:
if (condition) prefix="0x", len=2;
在這些後面的用途中,逗號運算的結果的值不是特別有用,所以也沒有那麼重要了,這可能是令人困惑至C初學者。
相關問題
- 1. 賦值運算符返回值類型
- 2. java複合賦值運算符和賦值運算符
- 3. 運算符超載賦值運算符
- 4. 參考返回賦值運算符
- 5. C++賦值運算符默認返回
- 6. 移動賦值運算符VS拷貝賦值運算符
- 7. 運算符的返回值++
- 8. 賦值運算符 - 自賦值
- 9. 重載賦值運算符
- 10. BigDecimal的賦值運算符
- 11. C++「| =」賦值運算符
- 12. 使用賦值運算符
- 13. 賦值運算符在
- 14. 嫩枝賦值運算符
- 15. 重載賦值運算符
- 16. 布爾賦值運算符
- 17. 默認賦值運算符
- 18. 賦值=運算符超載
- 19. 布爾賦值運算符
- 20. 賦值運算符繼承
- 21. c賦值運算符=
- 22. PHP賦值運算符=&
- 23. 賦值和等號運算符中的寬字符和字符
- 24. 算術和賦值運算符重載 - 返回值,範圍,結合表達式
- 25. 模板賦值運算符不替換默認賦值運算符
- 26. Javascript逗號運算符
- 27. CRTP和默認的賦值運算符
- 28. 平等和賦值運算符
- 29. 向量和賦值運算符
- 30. 賦值運算符和條件語句
值得一提的是,逗號運算符有點不受歡迎。它允許一些有用的構造,但它通常對學習者來說是一個驚喜和WTF。 – Steve314 2010-07-30 08:53:24