You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,后续外层循环的迭代再也无法触发内层循环执行,具体执行流程如下:

  1. 函数调用时,i和j以值传递的方式被初始化为0。
  2. 第一次进入外层循环:i=0满足i<5的条件,进入内层循环。
  3. 内层循环从j=0开始,每次执行输出后j自增,直到j=5时,j<5的条件不成立,内层循环退出。此时已经输出了0 0到0 4。
  4. 回到外层循环执行++i操作,i变为1。
  5. 再次判断外层循环条件1<5成立,尝试进入内层循环,但此时j的值还是5,j<5不成立,内层循环直接跳过,没有输出。
  6. 后续外层循环继续执行++i,i依次变为2、3、4,但每次进入内层循环时,j始终是5,都无法触发输出。直到i变为5,外层循环退出。

简单来说,只有第一次外层循环时内层循环完整执行了输出,后面的外层循环迭代都因为j已经是5,内层循环根本跑不起来,所以你看到的输出里i全是0。

内容的提问来源于stack exchange,提问作者tqw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:34:56