C语言的一个问题

若有以下程序
  main()
  { int p,a=5;
   if(p=a!=0)
   printf("%d\n",p);
   else
   printf("%d\n",p+2);
  }
  执行后输出结果是什么?请解释谢谢

第1个回答  2008-01-04
输出为1
因为
!=(不等于运算符)
=(赋值运算符)
前者的优先级要高于后者,且!=结合方向自左向右,=自右向左,所以p=a!=0其实先计算优先级高的,即a!=0,这个表达式计算后得到一个布尔型的值,之前a被赋值为5(5!=0),所以前面那个布尔型的值就为1(1表示真,0表示假),计算完后接下来计算赋值的表达式,即把1赋值给p,又因为p!=0,所以执行上面的if语句。即输出p的值为1
第2个回答  2008-01-04
(p=a!=0)的执行顺序如下:
(p = (a != 0))

a等于5,因此a!=0为true,转化为整数后为1,因此p被赋成了1,此时(p = 1)的表达式的值就是最后的值,也为1,而1转化为布尔值为ture,因此走第一个分支,输出1本回答被提问者采纳
第3个回答  2008-01-04
1
相似回答