学习C语言课程中遇到的示例,不明白为什么会输出1
#include<stdio.h>
int MyF(int a, int b)
{
int c;
if (a > b)
{
c = 1;
}
else if(a == b)
{
c = 0;
}
else
{
c = -1;
}
return c;
}
int main()
{
/*int d,e, f;
scanf_s("%d,%d",&e,&f);
d = Findmin(e,f);
printf("%d", d);*/
int i = 2;
int p;
p = MyF(i, i++);
printf("%d", p);
return 0;
在调试时显示a=3,b=2,实在不明白为什么,求解答
p = MyF(i, i++);
函数中参数的求值顺序是未定义行为,不同编译器不一样,所以这个函数的调用结果无法预测。
(1) a+b>c&&b==c
结果为0. 因为a+b=7>c=5,所以&&左边是真,用1表示。右边b==c用0表示。所以1&&0结果为0
(2)a||b+c&&b-c
结果为1。第93页的优先级别,算术运算符高于关系运算符,所以上面左边变成3||9为真,用1表示。右边为-1,故为1&&-1,都不是0,故为真,用1表示。
剩下几个一样的逻辑,自己分析。