19
#include <stdio.h>

main()
{
    int i;
    for(i=0; i<0, 5; i++)
        printf("%d\n", i);
}

我无法理解循环i<0, 5条件中的部分。for

即使我成功了i>0, 5,输出也没有变化。

这是如何运作的?

4

5 回答 5

17

关于主题

逗号运算符将始终产生逗号分隔列表中的最后一个值。

基本上,它是一个二元运算符,它计算左侧值但丢弃它,然后计算右侧值并返回它。

如果您链接其中的多个,它们最终将产生链中的最后一个值。

根据 anatolyg 的评论,如果您想在右手值之前评估左手值(如果左手评估具有理想的副作用),这很有用。

例如i < (x++, x/2),使用该运算符是一种理智的方式,因为您正在影响右手值,并影响左手值评估的影响。

http://en.wikipedia.org/wiki/Comma_o​​perator

旁注:你听说过这个好奇的操作员吗?

int x = 100;
while(x --> 0) {
    // do stuff with x
}

这只是另一种写作方式x-- > 0

于 2012-10-18T16:35:04.413 回答
10

逗号运算符评估i<0Ori>0并忽略。因此,它总是5存在于条件中。

所以它相当于:

for(i=0;5;i++)
于 2012-10-18T16:36:28.887 回答
4

昏迷运算符完成初始化和增量部分,执行类似的操作for(i=0,j=20;i<j;i++,j--),如果您在比较部分执行此操作,它将评估最后一个(因为它之前已经回答过)

于 2012-10-18T16:37:38.457 回答
3

i<0,5将始终计算为5,因为将始终返回正确的表达式ex1,ex2

于 2012-10-18T16:35:28.843 回答
1

逗号运算符适用于第一个操作数有一些副作用的情况。这只是一个成语,旨在使您的代码更具可读性。它对条件的评估没有影响。

例如,

for (i = 0; i<(i++, 5); i++) {
    // something
}

将递增i,然后检查是否i<5

于 2012-10-18T16:37:34.030 回答