条件运算符题目讲解

【单选题】设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("%d\n",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等价

本文分享自微信公众号 - 计算机二级C语言(gh_044a0595bf44)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励