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次