如何在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