黑马程序员技术交流社区

标题: C语言问号表达式的疑惑 [打印本页]

作者: koukou    时间: 2014-6-8 18:41
标题: C语言问号表达式的疑惑
int a=1,b=2,c=3,d=4;

printf("%d",a<b?a:c<d?c:d);请问最后的输出结果是?能不能说点详细点
作者: 黄莉萍    时间: 2014-6-8 21:42
最后输出的结果是1
三目运算的格式:条件?数值1:数值2
运行原理:以?为分隔点,前面为条件,后面为数值,:前面为数值1,冒号后面为数值2。如果条件成立就输出冒号前面的数值1,如果条件不成立就输出冒号后面的数值2
你所求的a<b?a:c<d?c:d是三目运算
可以这样理解:
条件为a<b ; 数值1为a ;数值2为c<d?c:d
(以?为分隔点判断条件是否成立,成立就输出数值1)
a为1,b为2,条件a < b成立,就输出a 则输出结果为1
因为a<b?a:c<d?c:d这个表达式把c<d?c:d看成一个整体了,但a<b条件成立就输出了a ,所有结果为1
a<b ? a : c < d ? c : d == a < b ? a:(c<d ? c : d)

如果你是的表达是(a<b ? a : c )< d ? c : d 则输出结果为3
可以这样理解:
第一个三目运算是:a<b ? a : c
a为1,b为2,条件a < b成立,就输出冒号前面的数值1,也就是输出a,则为1
第二个三目运算是:(a<b ? a : c )< d ? c : d 也就是前面表达式的结果与d比较
(a<b ? a : c )结果为1,d为4, 条件(a<b ? a : c )< d成立,就输出c,则为3
作者: 每天进步一点点    时间: 2014-6-8 23:53
输出结果为1,先算右边的三目运算符,得到一个值,得到后的值在同左边组成一个三目运算符




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2