我无法理解为什么此代码显示20 30 40作为输出。有人能解释一下用if语句编写的关系表达式是如何被C编译器理解的吗?
这是C程序的代码图像
#include <stdio.h>
int main()
{
int i = 20, j = 30, k = 40;
if (i > j == k)
{
printf("%d %d %d ",--i,j++,++k);
}
else
{
printf("%d %d %d ",i,j,k );
}
return 0;
}
输出:
20 30 40
首先要考虑的是运算符优先级。操作员>在运算符==之前进行求值,并返回一个值。在这种情况下,i>j是错的,所以它返回零。那么它检查零是否等于k,k是40,而不是。所以它转到else分支。
根据操作员优先级,i > j == k
作为(i > j) == k
执行
因此首先执行i > j
,返回布尔值(此处为false
,即0
(并将结果和不等于0
的k
进行比较。条件大于false,因此执行条件的else
部分