for循环运行原理疑问

我们在学习C语言的时候一定少不了使用for循环,大家对此都很熟悉吧,我原先以为自己对for循环的使用了如指掌,那还不是小菜一碟,结果在看《C语言深度剖析》一书时遇到一个课后问题就把我难住了。

int main(void)

{

  int i = 0;

  for(i = 0,printf("first = %d\n",i);

      i < 10,printf("second = %d\n",i);

           i++,printf("third = %d\n",i))

         {   

                   printf("fourth = %d\n",i); 

    }

        

         return 0;

}

就是这个程序,大家第一眼看过去一定会认为非常简单吧,其实我刚开始也这么觉得的,然后在Linux上跑了一下,发现是个死循环,一直在打印。想了好久都没想通,后面问了下前辈才解决,这里总结下。为什么会陷入死循环呢?肯定是判断语句出了问题(马后炮,哈哈,自己不动脑子),系统把判断语句当成了一个整体,i<10满足了但是可别忘了后面还有printf语句,系统认为它也是判断条件,但是这个printf是没有办法为假的,所以程序会一直运行下去。我们不妨试一下。

int main(void)

{

  int i = 0;

  for(i = 0,printf("first = %d\n",i);

      i < 10,i<5;

           i++,printf("third = %d\n",i))

         {   

                   printf("fourth = %d\n",i); 

    }

        

         return 0;

}

各位可以试一下,也许有些人可能还有疑问,为什么first只打印一次呢,为什么fourth会先third打印出来呢?这就和printf的运行机制有关了。在整个循环周期中,初始化语句只会执行一次,当执行完判断语句后,程序会立马运行{}里的语句,然后再去运行()里的第三条语句。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值