如题所述
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");
语句
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
温馨提示:答案为网友推荐,仅供参考
第1个回答 2006-10-22
c语言里(?:)结合在一起,是一个表答式.
它的结构是
( 条件表答式 ? 算术表答式1 : 算术表答式2 )
当条件表答式结果为真时,用算术表答式1作为结果表答式.
当条件表答式结果为假时,用算术表答式2作为结果表答式.
三个表答式可以很简单,也可以很复杂.
例如:
c= a>b? a*2+3 : b*4-5;
当a>b为 TRUE, c = a*2+3
当a>b为 假, c= b*4-5;
d = (a>b? a*2+3 : b*4-5) / x * y + z;
当a>b为 TRUE, d = (a*2+3) / x * y + z;
当a>b为 假, d = (b*4-5) / x * y + z;
凡用表达式的地方都可用它
例如:
#define COLOR_TABLE_SIZE C>16?256:16
它的结构是
( 条件表答式 ? 算术表答式1 : 算术表答式2 )
当条件表答式结果为真时,用算术表答式1作为结果表答式.
当条件表答式结果为假时,用算术表答式2作为结果表答式.
三个表答式可以很简单,也可以很复杂.
例如:
c= a>b? a*2+3 : b*4-5;
当a>b为 TRUE, c = a*2+3
当a>b为 假, c= b*4-5;
d = (a>b? a*2+3 : b*4-5) / x * y + z;
当a>b为 TRUE, d = (a*2+3) / x * y + z;
当a>b为 假, d = (b*4-5) / x * y + z;
凡用表达式的地方都可用它
例如:
#define COLOR_TABLE_SIZE C>16?256:16
第2个回答 2006-10-22
从左到右,给你个例子吧
int a,b,c;
a=10;
b=5;
c=a>b?a:b;
就是 "a大于b吗? 如果大于 ,那么c等于 a,否则c 等于b;
int a,b,c;
a=10;
b=5;
c=a>b?a:b;
就是 "a大于b吗? 如果大于 ,那么c等于 a,否则c 等于b;
第3个回答 2006-10-22
它的结合性是从右至左的.
C语言书中有对它的讲解!
C语言书中有对它的讲解!
第4个回答 2006-10-22
三目运算符
级别略低于*, ->
级别略低于*, ->