c语言中if语句条件为赋值语句

如m=0,m=1 是不是都会执行if后面语句,(m=0)&&(n=1) (m=1)&&(n=1)结果是一样的吗,如果不是,那赋值语句结果都为真这句话怎么理解

当if语句中的条件为赋值语句时,实际上是将赋值后的结果与0进行比较。比如下面的代码:

#include <stdio.h>
int main()
{
int a;
if (a = 0) printf("hello world\n");
return 0;
}

它等价于:

#include <stdio.h>
int main()
{
int a = 0;
if (a==0) printf("hello world\n");
return 0;
}

这个过程可以通过vc6.0的反汇编代码详细看到。

一条mov赋值指令,一条cmp比较指令,比较的对象是0和a的值。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-12
赋值语句不一定都是真的
&& 只要前面为假~~~后面的不执行
(m=0)&&(n=1) 假 m=0的值为0
(m=1)&&(n=1) 真

字符串的处理~~经常用这个原因来~~~作为结束条件
while(*p++=*q++)
结束条件就是'\0'赋值给*p
表达式的结果是0就是假
第2个回答  2011-03-12
只有 && 两边都是真值 它的值才为真,

这里 , m = 0 , m= 1 为初始值的时候

只有 m == 0 && m == 1 才是真值 其他都不会执行if下面的语句追问

不是说赋值语句都为真吗,那if(m=1)和if(m=0)应该都会执行后面语句啊

追答

对 ,我刚才说的是== 如果是赋值 不管赋什么值它都是正确的

追问

我怎么看到网上说只有赋值为0是为假,赋值为其他的时都是真啊 那么if(m=0)后面的应该不执行吧

追答

0是特殊的一个,只要是赋值为非0 ,它就是真的,是0,就是假的

本回答被提问者采纳
第3个回答  2011-03-12
对于你的&&运算来说一样的
相似回答