今天在书上看例子的时候,突然觉得对于for循环三个表达式的执行时间的理解还是很模糊,只知道在这里++i和i++的效果是一样的,而且前缀模式的效率更高,但是对于这一条表达式的是在本次循环开始前执行还是循环完毕之后执行还是不确定,于是决定就直接用简单的小程序分析一下。
#include <iostream>
using namespace std;
void main()
{
int i,j;
for(i=0,j=0;i<3;++i,cout<<"i= "<<i<<endl,j++,cout<<"j= "<<j<<endl)
{
cout<<"my i= "<<i<<endl;
cout<<"my j= "<<j<<endl<<endl;
}
system("pause");
}
非常简单的语句,输出
my i=0 my j=0
i=1 j=1 my i=1 my j=1
i=2 j=2 my i=2 my j=2
i=3 j=3
这样,可以清楚地发现,for循环中三个表达式的顺序
首先肯定是赋初值和判断,而变量更新,则是在执行完本次循环之后再进行的,从输出的第一行中可以分析得到,没有输出i=0 j=0,同时也发现了前缀与后缀在for循环中是相同的作用(效率的差别)
继续往后想,如果循环中嵌套了条件分支,其中包含break语句又会是一个什么情况呢,继续写简单的程序探究。
#include <iostream>
using namespace std;
void main()
{
int i;
for(i=1;i<4;++i,cout<<"i= "<<i<<endl)
{
if(i%3==0)
break;
cout<<"my i= "<<i<<endl<<endl;
}
cout<<"final i= "<<i<<endl;
system("pause");
}
输出
my i=1
i=2
my i=2
i=3
final i=3
可以看出,当执行break语句跳出循环的时候,程序将会直接跳过循环更新语句,i的终值也不会更新。
这样,我们可以讲for循环的“循环”理解的更加透彻,for循环中的三个表达式
初值表达式,可以理解为整个循环体的开始,相当于预处理的部分,
条件判断表达式呢,相当于每一轮循环的标题,标出我这轮循环是否有效,
最后的条件更新表达式,则是连接两轮循环之间的桥梁,
下面是大致给的一个示意图
以上也是在初始学习c++过程中理解问题的一个过程,简单的问题,简单粗略的分析。
希望有前辈能够之处其中的错误,给出一些学习的参考意见,谢谢了,继续奋斗了