條件運算符題目講解
- 2019 年 11 月 21 日
- 筆記
【單選題】設a=1,b=2,c=3,d=4,則表達式a<b?a:c<d?a:d的值是( )。
A 4
B 3
C 2
D 1
大家看到這個題目,會覺得這不是挺簡單的,根據優先順序(?: 優先順序是13,僅高於賦值、逗號運算符),先比較大小,再進行條件運算。選D,是很簡單,因為不管你算的對不對,都會得到答案1 。
我們把這段程式改一下,求表達式 1?9:1?8:4 的值是多少?你的答案是9還是8,這個和上面的就有所區別了。
我們執行下面程式碼看下結果
printf("%dn",1?9:1?8:4); 執行結果 9

不知道你的答案是不是對的。
不少同學認為 1?9:1?8:4 <=> (1?9:1)?8:4,所以得到結果8。
但實際上明顯是 1?9:1?8:4 <=> 1?9:(1?8:4),所以正確運行結果是9。
上面選擇題比較簡單,不管理解對錯,都很容易得到答案選D 1,但是不代表你真的懂。
需要注意的是條件運算符具有右結合性(同樣結合方向是右向左的還有優先順序為2的自增、自減運算、取值、取地址、邏輯非、sizeof等),不同於加減乘除、關係運算、邏輯運算等大部分結合方向是左到右。
類似題目:
w<x ? x+w : x<y ? x : y
與 w<x ? x+w : ( x<y ? x : y) 等價,與 (w<x ? x+w : x<y) ? x : y 不等價
a>b ? c>d ? e : f : g 與a>b ? (c>d ? e : f) : g等價