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

Rav*_*jha 19 c comma

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

我只想在for循环的条件下解释"i <0,5".

即使我把它设为"i> 0,5",我们也得到相同的输出.

有人可以解释一下这种情况是如何起作用的.(使用逗号运算符的条件,我已经搜索过http://en.wikipedia.org/wiki/Comma_o​​perator但根本没有帮助)

Mih*_*ncu 17

关于主题

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

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

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

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

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

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

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

int x = 100;
while(x --> 0) {
    // do stuff with x
}
Run Code Online (Sandbox Code Playgroud)

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

  • 但是,当你可以使用`i <++ x/2`时,为什么要使用`i <(x ++,x/2)` (3认同)

P.P*_*.P. 10

逗号运算符计算i<0Or i>0并忽略.因此,它始终5存在于条件中.

所以它相当于:

for(i=0;5;i++)
Run Code Online (Sandbox Code Playgroud)

  • 这很简单.条件总是正确的,即它是"5".所以这将是一个无限循环.在C中,"0"为假,其他任何都是真的.所以,如果你有`for(i = 0; 1; i ++)`或`for(i = 0; -1; i ++)`它们都是相同的并且将进入无限循环,除非你在内部有break语句循环:) (2认同)