C++中使用函数参数作循环变量的疑问:为何i始终为0?
为什么调用foo(0,0)后输出的i始终为0?
先看你给出的代码:
void foo(int i, int j) { for (; i < 5; ++i) for (; j < 5; ++j) std::cout << i << " " << j << std::endl; }
调用foo(0, 0)后输出的i始终为0,核心原因是内层循环结束后,j的值已经变成5,后续外层循环的迭代再也无法触发内层循环执行,具体执行流程如下:
- 函数调用时,i和j以值传递的方式被初始化为0。
- 第一次进入外层循环:
i=0满足i<5的条件,进入内层循环。 - 内层循环从
j=0开始,每次执行输出后j自增,直到j=5时,j<5的条件不成立,内层循环退出。此时已经输出了0 0到0 4。 - 回到外层循环执行
++i操作,i变为1。 - 再次判断外层循环条件
1<5成立,尝试进入内层循环,但此时j的值还是5,j<5不成立,内层循环直接跳过,没有输出。 - 后续外层循环继续执行
++i,i依次变为2、3、4,但每次进入内层循环时,j始终是5,都无法触发输出。直到i变为5,外层循环退出。
简单来说,只有第一次外层循环时内层循环完整执行了输出,后面的外层循环迭代都因为j已经是5,内层循环根本跑不起来,所以你看到的输出里i全是0。
内容的提问来源于stack exchange,提问作者tqw
相关产品推荐
相关产品推荐

