2.11 条件表达式
语句
if (a > b)
z = a;
else
z = b;
计算a和b的最大值存入z。用三重操作符书写的条件表达式``?:'',提供了另一种可选择的方法和相似的构造。表达式
expr1 ? expr2 : expr3
首先计算表达式expr1。如果它非0(真),那么计算表达式expr2,而这就是条件表达式的值。否则计算expr3,而它就是该值。仅计算expr2和expr3中的一个。所以为使z为a和b的最大值,令
z = (a > b) ? a : b; /* z = max(a, b) */
应该注意,条件表达式实际上是一个表达式,它可以用在其它类型表达式可以使用的任何地方。如果expr2和expr3具有不同类型,结果的类型由这一章中早些讨论的转换规则决定。例如,如果f是float并且n是int,那么表达式
(n > 0) ? f : n
是float类型,无论n是否为正数。
条件表达式中第一个表达式的括号不是必须的,因为?的优先级很低,只高于赋值符号。但是建议使用括号,因为它们能增强表达式条件部分的可读性。
条件表达式通常导致简洁的代码。例如,这个循环打印数组中的n个元素,每行10个,每一列之间用空格分开,并且每一行(包括最后一行)的末尾由一个换行符结束。
for (i = 0; i < n; i++)
printf("%6d%c", a[i], (i%10==9 || i==n-1) ? '\n' : ' ');
每十个元素、并且第n个元素后打印换行符。所有其它元素后面是一个空白符。这可能看上去很富技巧性,但是却比等价的if-else更紧凑。另一个好的例子是
printf("You have %d item%s.\n", n, n==1 ? "" : "s");
参考资料:the c programming language