区别:
int i;
for( i=0;i<5 && i<3;i++)
{
printf("stackoverflow.com");
}
和
int i;
for( i=0;i<5 , i<3;i++)
{
printf("stackoverflow.com");
}
我的意思是使用&amp;&amp;而不是&#39;,#39;
此致
答案 0 :(得分:1)
在第二个代码块中,实际上只使用i < 3
来评估循环是否应该退出。将评估i < 5
表达式,但会丢弃其值。有关详细信息,请参阅comma operator。
您的示例之间在功能上没有区别,因为i < 3
是限制性表达式并且显示在第二位。当我达到3时,两个循环都将退出。但是,如果您切换条款以便i < 3, i < 5
,则第二个在达到5时启动,因为只考虑i < 5
的值。
答案 1 :(得分:0)
在如下语句中使用逗号运算符,
时:
( <expression1>, <expression2> )
评估并丢弃<expression1>
,然后评估<expression2>
并返回其值。总之,评估最右边的表达式并返回其值。评估并丢弃其他表达式。所以你的陈述:
for(i=0; i<5 , i<3; i++)
相当于:
for(i=0; i<3; i++)
至于第一个陈述,这个表达式:
(i<5 && i<3)
是一个简单的AND布尔评估。一个搞笑一个,因为它足以说:
(i<3)
长话短说,谁做过这个例子可能希望你说&#34; 这两个条件都评估为第二个表达&#34;。
答案 2 :(得分:0)
在这种情况下,他们将完全一样。
不同之处在于,在第一种情况下,每次都不会评估i<3
。如果A && B
的返回值为B
,则表单A
上的语句只会执行true
。原因是如果两个操作数都为真,则&&
的逻辑值为真。如果其中一个为假,则整个表达式为false,因此如果左操作数的计算结果为false,则不需要计算正确的操作数。
另一方面,逗号运算符计算两个操作数,但左操作数的结果将被丢弃。