对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。
可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为是不是条件成立,条件成立为结果1否则为结果2。
注意:在C语言中,结果1 和 结果2的类型必须一致。
a ? b : c简单理解方式为:
-
//
-
if(a) {
-
return b;
-
}
else {
-
return c;
-
}
-
//
-
//
-
int a =
2;
-
int c =
3;
-
int b = (a > c) ? a : c;
-
cout <<
"b:" << b <<
endl;
-
//
这样输出的结果是:b:3
eg:
-
//
-
#include <stdio.h>
-
-
int mymax(int a, int b, int c);
-
-
int main()
-
{
-
int number_one, number_two, number_three;
-
printf(
"Please input three number: \n");
-
scanf(
"%d", &number_one);
-
scanf(
"%d", &number_two);
-
scanf(
"%d", &number_three);
-
int result = mymax(number_one, number_two, number_three);
-
printf(
"The result is : %d", result);
-
}
-
-
int mymax(int a, int b, int c)
-
{
-
int tmp =
0;
-
tmp = a > b ? a : (b > c ? b : c);
//这样写逻辑是错的
-
return tmp;
-
}
-
//
一般来说,三目运算符的结合性是右结合的
但是这点在ANSI C中并没有明确规定
所以它的执行顺序有时是由编译器决定的
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/qq_38880380">
<img src="https://profile.csdnimg.cn/7/F/8/3_qq_38880380" class="avatar_pic" username="qq_38880380">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit "><a href="https://blog.csdn.net/qq_38880380" data-report-click="{"mod":"popu_379","ab":"new"}" target="_blank">worthsen</a></span>
<!-- 等级,level -->
<img class="identity-icon" src="https://csdnimg.cn/identity/blog7.png"> <span class="flag expert">
<a href="https://blog.csdn.net/home/help.html#classicfication" target="_blank">
<img src="https://csdnimg.cn/release/phoenix/template/new_img/identityExpert.png" alt="">
博客专家
</a>
</span>
</div>
<div class="text"><span>原创文章 509</span><span>获赞 652</span><span>访问量 173万+</span></div>
</div>
<div class="right-message">
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379","ab":"new","extend1":"个人信息未关注"}">关注</a>
<a href="https://bbs.csdn.net/topics/395526900" target="_blank" class="btn btn-sm bt-button personal-messageboard">他的留言板
</a>
</div>
</div>
</div>