逻辑或||左边为真,右边到底执不执行,我的运行结果是
#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
逻辑或左边为真,右边是不会执行的,
这在编程中,叫逻辑短路。
但我用Dev运行的结果是:
a=0, b=3
a=1, b=5
a=1, b=5
a=0, b=5 逻辑与: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 枫915 发表于 2023-2-27 18:03
但我用Dev运行的结果是:
a=0, b=3
a=1, b=5
您预期的结果是? 不会,这是断路 dolly_yos2 发表于 2023-2-27 18:05
您预期的结果是?
不应该是:
a=0, b=3
a=1, b=5
a=1, b=3//不执行的话,这不应该是3?
a=0, b=5 枫915 发表于 2023-2-27 18:12
不应该是:
a=0, b=3
a=1, b=5
b 的值怎么会自动回到3呢?无论是否短路,初始化之后的语句里它就只可能被赋值为5了 dolly_yos2 发表于 2023-2-27 18:15
b 的值怎么会自动回到3呢?无论是否短路,初始化之后的语句里它就只可能被赋值为5了
突然看明白了,是因为第二次赋值b的值已经被改成5了,这是全局变量? 枫915 发表于 2023-2-27 18:21
突然看明白了,是因为第二次赋值b的值已经被改成5了,这是全局变量?
没错,所以如果改变每次赋值的值让其互不相同可能会看得更清楚一些
这不是全局变量,但是同一个变量,一直在其作用域内
页:
[1]