Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 与&;逻辑关联的for循环中的多个测试条件&;_C_For Loop_Logical Operators - Fatal编程技术网

C 与&;逻辑关联的for循环中的多个测试条件&;

C 与&;逻辑关联的for循环中的多个测试条件&;,c,for-loop,logical-operators,C,For Loop,Logical Operators,例如: for(j=0;t1&&t2&&t3;j++); 如果t1失败,for循环是否会检查t2和t3?逻辑上不需要检查,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的t2和t3条件,并假设它们在循环的每个周期都发生。逻辑上不需要,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的t2和t3条件,并假设它们在循环的每个周期都

例如:

for(j=0;t1&&t2&&t3;j++);

如果t1失败,for循环是否会检查t2和t3?

逻辑上不需要检查,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的
t2
t3
条件,并假设它们在循环的每个周期都发生。

逻辑上不需要,因为第一个条件为false会使整个语句为false。这在技术上被称为“短路评估”。这就是为什么您不应该创建产生副作用的
t2
t3
条件,并假设它们在循环的每个周期都在发生。

对于(j=0;(t1&&t2)&&(t2&&t3);j++;//应该有用

误读了这个问题。不,不会的。C使用短路评估,这意味着一旦它为假,它就为假。

对于(j=0;(t1&&t2)&&&(t2&&t3);j++);//应该有用


误读了这个问题。不,不会的。C使用短路评估,这意味着一旦它为假,它就为假。

否,如果您有(值和任何值)且值变为假,则忽略所有其他内容。

否,如果您有(值和任何值)在
循环的
中,以及在使用
&&
|
的所有其他情况下,计算从左到右进行,直到知道答案。这时,评估停止了。这就是所谓的短路

这是一个非常重要的特性,因为它允许您通过在前面插入检查来“保护”后续表达式。比如说,

if (ptr != 0 && ptr->property == 42) {
}
不会仅因为短路而在
ptr==NULL
上崩溃。如果没有它,程序员将被迫写得不那么愉快

if (ptr != 0) {
    if (ptr->property == 42) {
    }
}

为避免崩溃。

在<代码>中,对于
循环,以及在使用<代码>&&
或<代码>|的所有其他情况下,评估从左到右进行,直到知道答案。这时,评估停止了。这就是所谓的短路

这是一个非常重要的特性,因为它允许您通过在前面插入检查来“保护”后续表达式。比如说,

if (ptr != 0 && ptr->property == 42) {
}
不会仅因为短路而在
ptr==NULL
上崩溃。如果没有它,程序员将被迫写得不那么愉快

if (ptr != 0) {
    if (ptr->property == 42) {
    }
}
<>避免碰撞。< / P> < P>不,C和C++保证条件的“短路”,即“测试”一旦条件被确定就停止(如果对于代码>和代码>有错误的话,那么它就确定它永远不能是代码>真< /代码>,如果某个东西是<代码>真< /代码>,在<代码> < <代码>中,这不可能是假的

这样可以安全地执行以下操作:

if (ptr != NULL && ptr->x > 10) ... 
< >不,C和C++保证条件的“短路”,即“测试”一旦条件被确定就停止(如果对于代码>和代码>有什么是错误的,那么它就确定它永远不能是代码>真< /COD>,并且如果某个东西是<代码>真< /COD> > < <代码> <代码>,它不能是假。p> 这样可以安全地执行以下操作:

if (ptr != NULL && ptr->x > 10) ... 

C将短路包含逻辑and和OR的表达式,因此一旦知道表达式的结果,计算将停止。给出的表达式是:

t1 && t2 && t3

由于它是一个逻辑AND运算符,一旦t1被评估为false,就会跳过t2和t3的评估,因为整体结果是已知的

C将短路包含逻辑and和OR的表达式,因此一旦知道表达式的结果,计算将停止。给出的表达式是:

t1 && t2 && t3
由于它是一个逻辑AND运算符,一旦t1被评估为false,就会跳过t2和t3的评估,因为整体结果是已知的

来自(这是一个相当新的草案版本,但该特定段落自ANSI-C草案以来一直存在)

与按位二进制&运算符不同,&&运算符保证 从左到右评价;有一个序列点在 第一个操作数的求值如果第一个操作数比较相等 如果设置为0,则不计算第二个操作数

强调我的观点,所以是的,编译器必须在遇到操作数时立即短路逻辑and条件,从而使其返回0。

来自(这是一个相当新的草案版本,但自ANSI-C草案以来,这一特定段落一直存在)

与按位二进制&运算符不同,&&运算符保证 从左到右评价;有一个序列点在 第一个操作数的求值如果第一个操作数比较相等 如果设置为0,则不计算第二个操作数

强调我的,所以是的,编译器必须在遇到操作数时立即短路逻辑and条件,从而使其返回0。

请参阅。请参阅。