C编译器如何理解if-else语句中编写的以下关系表达式



我无法理解为什么此代码显示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(并将结果和不等于0k进行比较。条件大于false,因此执行条件的else部分

相关内容

  • 没有找到相关文章

最新更新