-3 c operators ternary-operator conditional-operator operator-precedence
#include <stdio.h>
int main()
{
int a=-1?2:5 + 8?4:5;
printf("%d\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以上程序的输出是2.但为什么呢?请解释
编写人类可读且易于理解的代码.(至少,尝试...)
int a=-1?2:5 + 8?4:5;
Run Code Online (Sandbox Code Playgroud)
是相同的
int a = (-1) ? 2 : ( 5 + ( 8 ? 4 : 5) );
Run Code Online (Sandbox Code Playgroud)
参考:运算符优先级
现在,让我们将其与三元运算符条件进行比较,如C11章节§6.5.15中所述,
第一个操作数被评估; 在其评估与第二或第三操作数的评估之间存在一个序列点(以评估者为准).仅当第一个操作数不等于0时才评估第二个操作数; 仅当第一个操作数比较等于0时才评估第三个操作数; 结果是第二个或第三个操作数的值(无论哪个被评估),
所以,在你的情况下,