#include <stdio.h>
main()
{
int i;
for(i=0; i<0, 5; i++)
printf("%dn", i);
}
我无法理解for
循环条件下的i<0, 5
部分。
即使我把它i>0, 5
,输出也没有变化。
这是如何工作的?
关于主题
逗号运算符将始终生成逗号分隔列表中的最后一个值。
基本上,它是一个二元运算符,它计算左手值但丢弃它,然后计算右手值并返回它。
如果链接其中的多个,它们最终将产生链中的最后一个值。
根据anatolyg的评论,如果您想在右手值之前评估左手值(如果左手评估具有理想的副作用),这将非常有用。
例如i < (x++, x/2)
使用该运算符是一种理智的方式,因为您正在影响右手价值,并受到左手价值评估的影响。
http://en.wikipedia.org/wiki/Comma_operator
旁注:你听说过这个好奇的操作员吗?
int x = 100;
while(x --> 0) {
// do stuff with x
}
这只是另一种写x-- > 0
的方式.
逗号运算符计算i<0
Ori>0
并忽略。因此,它始终是该病症中存在的5
。
所以它相当于:
for(i=0;5;i++)
逗号运算符对初始化和增量部分完成,以执行类似for(i=0,j=20;i<j;i++,j--)
的操作,如果您在比较部分执行此操作,它将评估最后一个(如之前已经回答的那样)
i<0,5
的计算结果将始终为5
,因为总是会返回正确的表达式ex1,ex2
。
逗号运算符适用于第一个操作数有一些副作用的情况。这只是一个成语,旨在使您的代码更具可读性。它对条件的评估没有影响。
例如
for (i = 0; i<(i++, 5); i++) {
// something
}
将递增i
,然后检查是否i<5
。