首页 > 编程知识 正文

c语言中三目运算符的理解,c语言三目运算符运算顺序

时间:2023-05-04 05:42:27 阅读:242395 作者:2869

在看别人C代码时遇到三目运算符(条件运算符) ’ ?:'省略中间参数的情况:

#include <stdio.h>int main(int argc, char *argv[]){ int a = 200; int b = 0; b = a?:100;//---------❶ printf("a = %d b = %dn",a,b); b = a > b ?:b;//--------❷

通过printf函数打印b的值可知,在❶语句中三目运算符中间省略的是a,在❷中三目运算符中间省略的是a > b,我们知道三目运算符完整的写法是:

<表达式1> ? <表达式2> : <表达式3>;

即先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。

<表达式1> ? : <表达式3>;
等价于
<表达式1> ? <表达式1> : <表达式3>;

但是有例外情况:

当<表达式1> 中有自加++或者自减- - 时不能冒然省略中间参数,因为两种方法效果不同;

#include <stdio.h>#define INC(x) (++x)int main(int argc, char *argv[]){ int x = 0; int y = 0; y = INC(x) ? INC(x) : 3; printf("y=%dn", y); x = 0; y = INC(x) ? : 3; printf("y=%dn", y); return 0;}

y第一次等于2,进行了两次自加,第二次等于1,只进行了一次自加。

三目运算符使用注意:

条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b;条件运算符的结合方向是自右至左。a>b?a:c>d?c:d 应理解为a>b?a:(c>d?c:d) 这也就是条件表达式嵌套的情形,但是不推荐这种写法;

三目运算符省略中间参数的用法的使用场景:

在上面例子中,在表达式x为宏定义的时候,使用x ? : y 代替x ? x : y,可以避免有些宏定义产生的边界效应;满足<表达式1> ? <表达式1> : <表达式3>;即当<表达式1> 的值为真,<表达式1> 的值即为整个表达式的结果;

参考文章:
C语言三目运算符省略?与:之间的参数
三目运算符“?:”省略中间操作数的分析

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。