追光THO 发表于 2022-7-27 17:18:56

if()括号里面出现的不是关系判断==,而是=,会发生什么?

该视频截图正在向我们展示if()括号里面出现的不是关系判断==,而是=,会发生什么。但是我不理解为什么if(age = 0)会执行{}里面的内容,输出了604800.000000,而if(age = 0)不会执行{}里面的内容。

jackz007 发表于 2022-7-27 17:42:17

本帖最后由 jackz007 于 2022-7-27 17:49 编辑

      先考察一下这个代码:
#include <stdio.h>

int main(void)
{
      int a , b , age                         ;
      a = (age = 0)                           ;
      printf("a = %d , age = %d\n" , a , age) ;
      b = (age = 60)                        ;
      printf("b = %d , age = %d\n" , b , age) ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
a = 0 , age = 0
b = 60 , age = 60

D:\\C>
      下面探讨一下楼主的问题
      if(age = 60)   // 表达式 age = 60 的值是 60,对应的逻辑值当然是 true 了
      if(age = 0)    // 表达式 age = 0 的值是 0,对应的逻辑值当然是 false 了

追光THO 发表于 2022-7-29 15:48:54

jackz007 发表于 2022-7-27 17:42
先考察一下这个代码:

      编译、运行实况:


我可以这么理解吗?if()括号里面看的是逻辑值,如果> <=!= 等,成立就是1,不成立就是0,而这里对于age算赋值,括号里面是60,不是0,所以运行if()后面的语句,如果括号里面不成立,就是0,age=0也是0,所以不运行。

追光THO 发表于 2022-7-29 15:49:35

jackz007 发表于 2022-7-27 17:42
先考察一下这个代码:

      编译、运行实况:


我还有一点糊涂

追光THO 发表于 2022-7-29 15:56:09

追光THO 发表于 2022-7-29 15:48
我可以这么理解吗?if()括号里面看的是逻辑值,如果> <=!= 等,成立就是1,不成立就是0,而这里对 ...

==

jackz007 发表于 2022-7-29 16:02:28

追光THO 发表于 2022-7-29 15:48
我可以这么理解吗?if()括号里面看的是逻辑值,如果> <=!= 等,成立就是1,不成立就是0,而这里对 ...

       这个理解是对的,任何一个整数都有对应的逻辑值,0 对应于 false,非 0 对应于 true。
页: [1]
查看完整版本: if()括号里面出现的不是关系判断==,而是=,会发生什么?