嵌套 for 循环,初始化在循环外

Nested for loops with initialization outside the loop

#include <stdio.h>

int main()
{
    int i = 1, j = 1;

    for(i; i<=5; i++)
    {
        for(j; j<=5; j++)
        {
            printf("%d - %d\n",i, j);
        }
    }
    return 0;
}

上面的代码只运行一次外循环。 输出为:

1 - 1
1 - 2
1 - 3
1 - 4
1 - 5

但是当我进行以下更改时,printfs 打印了预期的 25 次。

    for(i=1; i<=5; i++)
    {
        for(j=1; j<=5; j++)
        {
            printf("%d - %d\n",i, j);
        }
    }

有人可以解释一下这种行为吗?

i 的第二次迭代中很简单(当 i=2 时)j 的值为 6,因此第二个(嵌套的)for 永远不会运行。但在第二种情况下,在 i 的每次迭代中, j 被初始化为 1.

i 循环按预期 运行ning 5 次,但您的 j 循环仅 运行 用于第一次迭代。
在您的第一个示例中,j 变量向上递增到 6,然后再也不会 运行(因为 6 =/= <=5)。

当您将 j 循环更改为 (j=1; ...) 时,它现在 运行s 每次 i 循环 运行s 5 次,这就是为什么您得到 25 输出行。