一、问题
在程序中偶尔可见“ ?: ”运算符,怎样使⽤这个运算符呢,什么时候使⽤呢?
二、解答
“ ?: ”叫做条件运算符,它是C语⾔中唯⼀⼀个三⽬运算符,所谓运算符的⽬,就是⼀个运算符和⼏个操作数相结合,例如“a++”,++是单⽬运算符。“3+2”、“a>b”、+和> 都是双⽬运算符。条件表达式的格式为:
测试表达式 ? 结果表达式1 : 结果表达式2
整体上叫做⼀个条件表达式。
条件表达式的值:先求解“测试表达式”的值,如果其值为真,整个表达式的值是“结果表达式1”,否则是“结果表达式2”。例如:
a = 5;
b = 4;
c = a > b ? a : b;
printf("%d", c);
此时c的值为5。
上述 c=a>b?a:b 的功能与
if (a > b)c = a;
elsec = b;
完全相同。由于条件运算符实现的功能与 if..else 语句完全相同,因此条件运算符在程序中很少⽤到。
条件运算符的优先级和结合性:
条件运算符的优先级低于逻辑运算符“&&”和“1”,⾼于赋值运算符“=”,结合性从右向左。
优先级的举例:
x = a > = 0 && b > = 0 ? a * b : 0
以上表达式可理解为:
x = ((a > = 0) && (b >= 0) ? (a * b) : 0)
结合性的举例:
x = a > b && a > c ? a : b > c ? b : c
由结合性从右向左,以上表达式可理解为:
x = a > b && a > c ? a : (b > c ? b : c);
在函数调⽤中,为了程序结构易于理解,条件运算符很少⽤到。但在宏调⽤中,由于条件运算符可以实现选择结构的功能,因此得到⼴泛应⽤。例如:
#define max(a, b) (a) > (b) ? (a) : (b)
三、总结
从上例看,条件运算符写的程序⽐ if..else 语句要简单得多。因此,两种⽤法各有各的优点。