C语言中循环条件下的逗号运算符

时间:2012-10-18 16:33:38

标签: c comma

    #include<stdio.h>
    main()
    {
        int i;
        for(i=0;i<0,5;i++)
        printf("%d\n",i);
    }

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

即使我制作i>0,5,输出也没有变化。

这是如何运作的?

5 个答案:

答案 0 :(得分:17)

关于主题

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

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

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

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

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

http://en.wikipedia.org/wiki/Comma_operator

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

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

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

答案 1 :(得分:10)

逗号运算符评估i<0i>0并忽略。因此,条件中始终存在5

所以它相当于:

for(i=0;5;i++)

答案 2 :(得分:3)

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

答案 3 :(得分:2)

昏迷操作员完成初始化和增量部分,做for(i=0,j=20;i<j;i++,j--)之类的事情,如果你在比较部分进行,它将评估最后一个(因为它之前已经回答过)< / p>

答案 4 :(得分:1)

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

例如,

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

将增加i,然后检查i<5