C语言 d=a>b?a>c?a:c:b 这个的顺序是怎么走的

#include <stdio.h>
void main()
{
int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?a>c?a:c:b);
getch();
}

本来我想通了 先判断a>b为真还是假,为假的话直接输出b的值,为真的话判断a>c?,为真输出a,为假输出c,但是后来查了下,运算顺序是从右往左的,刚怎么去理解呢?

三目运算(?:)是执行 右结合方式的,a>b?a>c?a:c:b 这个 式子 可以写出 a>b?(a>c?a:c):b;

这就简单了,括号 是 选择 a、c 的大值;
那么 外面的 三目运算 是 a、b 的大值,如果 a大 ,再选择 a、c 的大值。
PS,估计 这程序 本是想 选择 a、b、c 之间的最大值,可是 结果做不到,因为 当 b>a时,直接就输出 b 了,根本就不管 c 的死活。
可以这样写:
(a>b?a:b)>c?(a>b?a:b):c;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-30
三目运算符的结合性是从右向左的,所以先判断a>c,然后判断a>b。就是a、c中找一个大的和b比较,然后选择大的一个。就是找三个数中最大的。本回答被提问者和网友采纳