【单选题】设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等价