具有两个条件的C循环-差异
这两者之间有什么区别具有两个条件的C循环-差异,c,loops,difference,C,Loops,Difference,这两者之间有什么区别 int i; for( i=0;i<5 && i<3;i++) { printf("stackoverflow.com"); } inti; 对于第二个代码块中的(i=0;i),实际上只有i
int i;
for( i=0;i<5 && i<3;i++)
{
printf("stackoverflow.com");
}
inti;
对于第二个代码块中的(i=0;i),实际上只有i<3
用于计算循环是否应该退出。将计算i<5
表达式,但其值将被丢弃。有关更多信息,请参阅
示例之间在功能上没有区别,因为i<3
是限制表达式,并且出现在第二个。当我达到3时,两个循环都将退出。但是,如果您切换了术语,使其具有i<3,i<5
,那么第二个循环在达到5时将退出,因为只有i<5
的值是cons已识别。在以下语句中使用逗号运算符,
:
( <expression1>, <expression2> )
(,)
对
求值并丢弃,然后对
求值并返回其值。总之,对最右边的表达式求值并返回其值。对其他表达式求值并丢弃。因此:
for(i=0; i<5 , i<3; i++)
for(i=0;i在这种情况下,它们将执行完全相同的操作
不同的是,在第一种情况下,i已经得到了回答。建议的副本只解释了两个代码片段中的一个…不是真正的副本,因为这是正确的;不确定为什么有人否决了它现在似乎有两个人否决了,只是为了准确起见,其他的表达式都被计算了(按从左到右的顺序)在最右边的表达式之前。如果有副作用,顺序很重要。@Barmar请澄清。对于逗号运算符,即使没有副作用,顺序也很重要。@klutt如果没有副作用,执行顺序有什么区别?只要它返回右边表达式的值,您就无法分辨哪个ord呃,它执行了它们。@Barmar区别在于哪个表达式起作用。在&&
的情况下,顺序只在有副作用时才起作用,但使用逗号运算符,无论结果如何,你都会得到不同的结果。@klutt如果你有a+3,b+4
,它有什么区别?它做加法的顺序是什么,只要r结果是b+4
?
for(i=0; i<5 , i<3; i++)
for(i=0; i<3; i++)
(i<5 && i<3)
(i<3)