c语言中的for多成循环,如何在C’for’循环中放置两个递增语句?

一个常见的习惯用法是使用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

",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

",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多年了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值