请教一个C语言的简单问题~谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:14:02
void main()
{int p,a=5;
if(p=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
的运行结果为什么是1,请帮忙解释一下,谢谢!

关系运算符的优先级高于赋值运算

相当于 p=(a!=0)

由于a=5
所以a!=0 的值为1;
然后将1赋值给p=1;
条件为真,输出p=1;

因为
{int p,a=5;
if(p=a!=0)
这条语句成立,所以就直接执行printf("%d\n",p); 这条语句了,所以答案是1

void main()
{int p,a=5;
if(p=a!=0)
//此条语句是选择语句。说明:
//p=a!=0先算a!=0,然后赋值给p(这里不管p为1还是0都为真,因为此处为赋值运算符)所以为真为1
printf("%d\n",p); //输出为1(此处只有1或0)
else
printf("%d\n",p+2); //不会执行这条语句,因为条件都为真,不会为假。
}
/****************************************************************/
你最好去看一下运算符的优先级和结合性这方面的内容。基本上C语言书里面好像附录里有,看一下可能会有帮助。

若p=a且不等于零 显示p 也就是a的值 5
否则显示p+2的值

因为你定义的p是自动变量 他的初始值是随机的

关键是这一句:if(p=a!=0),这个条件是成立的,所以执行后面语句。
在c语言中,是先算a!=0的,查查优先级就知道了