枫915 发表于 2023-2-27 17:54:16

逻辑或||左边为真,右边到底执不执行,我的运行结果是

#include <stdio.h>

int main()
{
        int a=3,b=3;
       
        (a=0) && (b=5);
        printf("a=%d, b=%d\n", a,b);
       
        (a=1) && (b=5);
        printf("a=%d, b=%d\n", a,b);       
       
        (a=1) || (b=5);
        printf("a=%d, b=%d\n", a,b);
       
        (a=0) || (b=5);
        printf("a=%d, b=%d\n", a,b);
       
        return 0;
}

quark 发表于 2023-2-27 18:01:07

逻辑或左边为真,右边是不会执行的,
这在编程中,叫逻辑短路。

枫915 发表于 2023-2-27 18:03:06

quark 发表于 2023-2-27 18:01
逻辑或左边为真,右边是不会执行的,
这在编程中,叫逻辑短路。

但我用Dev运行的结果是:
a=0, b=3
a=1, b=5
a=1, b=5
a=0, b=5

dolly_yos2 发表于 2023-2-27 18:03:28

逻辑与:https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf#subsection.6.5.13
逻辑或:https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf#subsection.6.5.14

dolly_yos2 发表于 2023-2-27 18:05:07

枫915 发表于 2023-2-27 18:03
但我用Dev运行的结果是:
a=0, b=3
a=1, b=5


您预期的结果是?

1203081549 发表于 2023-2-27 18:06:42

不会,这是断路

枫915 发表于 2023-2-27 18:12:17

dolly_yos2 发表于 2023-2-27 18:05
您预期的结果是?

不应该是:
a=0, b=3
a=1, b=5
a=1, b=3//不执行的话,这不应该是3?
a=0, b=5

dolly_yos2 发表于 2023-2-27 18:15:26

枫915 发表于 2023-2-27 18:12
不应该是:
a=0, b=3
a=1, b=5


b 的值怎么会自动回到3呢?无论是否短路,初始化之后的语句里它就只可能被赋值为5了

枫915 发表于 2023-2-27 18:21:20

dolly_yos2 发表于 2023-2-27 18:15
b 的值怎么会自动回到3呢?无论是否短路,初始化之后的语句里它就只可能被赋值为5了

突然看明白了,是因为第二次赋值b的值已经被改成5了,这是全局变量?

dolly_yos2 发表于 2023-2-27 18:23:12

枫915 发表于 2023-2-27 18:21
突然看明白了,是因为第二次赋值b的值已经被改成5了,这是全局变量?

没错,所以如果改变每次赋值的值让其互不相同可能会看得更清楚一些
这不是全局变量,但是同一个变量,一直在其作用域内
页: [1]
查看完整版本: 逻辑或||左边为真,右边到底执不执行,我的运行结果是