不是的
根据a>b这个表达式的值,选择性的执行第一分支或是第二分支。
这里a=1,b=2,a>b的值为0,执行第二分支,即以a>b?a:b作为整个表达式的值
而a>b?a:b走的也是第二分支,即以b作为最终表达式的值
不是你这么想象的先把括号里面的先计算好。你这里只是一个巧合。
以下为例:
#include "stdio.h"
#include "stdlib.h"
int main()
{
int a=3,b=2;
int z;
z=a>b?(a++):(a--);
printf("a=%d\n",a);
return 0;
}
这里就不能按照你那么简单的先把括号里面简化。这里只执行第一选择分支a++,而第二分支根本不会被执行。
三目运算符,可以转化为if-else组来理解
if(a>b) z=a;
else if(a>b) z=a;/*实际这个else和上面的if一样的判断条件和执行体*/
else z=b;
只有当前面的条件不满足,才会进一步执行后面的条件语句
不是的。
是因为前面的a>b不成立才去执行括号里的表达式的。如果前面的a>b成立,括号里的表达式不会被执行。比如
a=1,b=2;
z=ab ? 2 : a=4);
z的值为1(表明,括号里的表达式没有执行)。
是的,其实整个算式就是取A和B之中最大的和下面的语句执行效果一样的
z=a>b?a:b;
不是说先执行括号里的,先要判断条件运算符的条件,a>b不成立,所以执行括号里的,继续判断,得出2的结果
对啊,先计算括号里的,你的理解没问题
恩 当然啊