int p,a=5
定义两个有符号的整型变量 p,a,并且对a赋值5
if(p=a!=0)
分两步 从右到左
1、a!=0 是判断a是否等于0
若等于 返回 0
若等于 返回 1
结果是不等于 返回了 1
2、p= 返回值 也就是 p=1
3、这时候,再判断 if(p) 判断结果为真,所以输出p的值 ,为1
0分数。。。。。。晕不晕呀,不厚道~
这个 你要了解 运算符的 优先级问题
请看 运算符优先级 列表
!=的优先级 明显高于 赋值运算符
所以p=a!=0的计算顺序是 p=(a!=0)(可以这么理解)
a的值是5,所以a!=0必然是 真 所以 p被赋值1
而if的判断条件 变成 if(p=1)即 if(p),即if(1)
所以 会执行printf(" %d\n",p) ;
所以输出 1
(p=a)!=0就是将a的值付给p,判断p不等于0,等价于 a!=0,当然不等啊,a等于5啊
int p 为定义变量p
a=5 定义变量a,并赋值a等于5
if(p=a!=0) a!=0赋值于p
因为a!=0为真,所以赋p值为1
正确答案是1.p赋值是对所以是1