條件運算符題目講解

  • 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等價