其他分享
首页 > 其他分享> > 如何在C’for’循环中放置两个递增语句?

如何在C’for’循环中放置两个递增语句?

作者:互联网

我想在for循环条件中增加两个变量而不是一个.

所以类似于:

for (int i = 0; i != 5; ++i and ++j) 
    do_something(i, j);

这是什么语法?

解决方法:

一个常见的习惯用法是使用comma operator来计算两个操作数,并返回第二个操作数.从而:

for(int i = 0; i != 5; ++i,++j) 
    do_something(i,j);

但它真的是一个逗号运算符吗?

现在写了这篇文章,一位评论者认为它在for语句中实际上是一些特殊的语法糖,而不是逗号运算符.我在GCC检查了如下:

int i=0;
int a=5;
int x=0;

for(i; i<5; x=i++,a++){
    printf("i=%d a=%d x=%d\n",i,a,x);
}

我期待x拿起a的原始值,所以它应该显示为5,6,7 ..对于x.我得到的是这个

i=0 a=5 x=0
i=1 a=6 x=0
i=2 a=7 x=1
i=3 a=8 x=2
i=4 a=9 x=3

但是,如果我将表达式放在括号中以强制解析器真正看到逗号运算符,我就会得到它

int main(){
    int i=0;
    int a=5;
    int x=0;

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

i=0 a=5 x=0
i=1 a=6 x=5
i=2 a=7 x=6
i=3 a=8 x=7
i=4 a=9 x=8

最初我认为这表明它根本不是一个逗号运算符,但事实证明,这只是一个优先问题 – 逗号运算符有lowest possible precedence,所以表达式x = i,a被有效地解析为(x = i),a

感谢所有的评论,这是一个有趣的学习经历,我已经使用C多年了!

标签:c,for-loop,comma-operator
来源: https://codeday.me/bug/20190918/1811635.html