for多重循环的执行顺序是先执行内部循环,再执行外部循环
通过对代码进行等价转换,按照上述原理即可知道代码的执行顺序
对于上面代码:
for(i=0i<8i++)for(j=0j<10j++)
scanf("%d,%d",&i,&j)
它等价于下面
for(i=0i<8i++){for(j=0j<10j++){
scanf("%d,%d",&i,&j)
}
}
从上面可以看出,每执行完一次j循环,i的值才增加1
但是注意,该代码有一个陷阱:scanf函数会改变i和j的值
实际执行顺序会受用户输入的i、j值的不同而不同
对于下面的代码
for(i=0i<8)min_m(i++)=i
for(j=0j<8j++)
它等价于下面的代码:
for(i=0i<8){min_m(i++)=i
}
for(j=0j<8j++){}
会先执行min_m函数8次 然后再执行j循环
注意,该代码有一个问题,就是min_m函数的返回值必须是一个左值。
这意味着某些变量的值发生了更改,可能会影响到循环。
顺序执行,从main函数开始,顺序执行。遇到调用的其它函数就先运行函数,然后继续执行主函数下面的语句。
当整个程序编写好后,编译器先编译,再连接各种库函数,然后执行程序。
for (i = 0i<2i++){
for (j = 0j<2j++)
{
for (k = 0k<2k++)
{
printf("%d %d %d\n", i, j, k)
}
}
}
最开始i=0, j=0,k从0到1;
输出:0 0 0 / 0 0 1
然后k循环结束,j增加变为1,此时k继续从0到1,
继续输出:0 1 0 / 0 1 1
然后k循环结束,j循环结束,i增加变为1,j继续从0开始,k从0到1;
输出:1 0 0 / 1 0 1
然后k循环结束,j变为1,k继续从0到1;
输出: 1 1 0 / 1 1 1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)