【C语言】for循环常见问题

for循环的语法

语法:for(表达式1; 表达式2; 表达式3){ 循环语句…}
表达式1:初始化部分(初始化也可以放在循环体外);
表达式2:条件判断部分,用于判断循环何时终止;
表达式3:调整部分(条件变量的更新)。

for循环相比while循环,for循环的三个必要条件(初始化、判定、更新)由于风格原因,三个部分距离较近,便于查找修改。

for循环的常见问题

死循环

1.判断条件设置错误
在这里插入图片描述2.数组越界导致条件变量数据被覆盖修改
如下图所示,数组arr大小为10,而在for循环体中从i=10开始,访问arr数组越界。(运行结果为vs2013下的运行结果,不同编译器的运行结果可能不同)
在这里插入图片描述

出现以上死循环的原因为:函数在运行中在内存中的栈上开辟空间,如下图所示,局部变量i首先定义并初始化,随后arr数组建立,i与arr先后在栈上开辟空间,数组下标由下自上增加,当以i为下标访问数组越界时,越界的数组占用了变量i所在的存储位置,将i原有的数据覆盖掉改为了1。
所以在之后的循环中,条件变量i又从1 开始循环增加,重新从1号下标开始为arr元素赋值,直到数组再次越界覆盖i的内容,从而造成了死循环。

在这里插入图片描述
在这里插入图片描述当i=12时,arr[12]=1 就会覆盖i的值,将i的内容改为1
在这里插入图片描述
注意:不同平台下运行结果可能不同,因为存储i的位置与数组位置的间隔可能不同。

循环判断为逗号表达式

如下所示,for循环的判断条件如果使用逗号表达式会造成什么现象?
在这里插入图片描述
判断时,先判断x<3,在判断y<5,但最后只取最后一个表达式的真假作为是否成立的结果
若将判断条件替换为x<5,y<3 则循环只进行3次
在这里插入图片描述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值