嵌套 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 输出行。
#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 输出行。