为什么输出为 8883。代码是如何执行的?
Why is the output coming as 8883. How is the code is being executed?
变量 i
在循环的第一个条目处变为 8
。那下次条件i <= 2
怎么满足呢?
#include <stdio.h>
int main()
{
int i;
for (i = 0; i <= 2; i++)
{
int i = 8;
printf("%d", i);
}
printf("%d", i);
return 0;
}
它在 i = 0、i = 1 和 i = 2 的循环中打印 8
三次。
for(i=0;i<=2;i++)
{
int i=8;
printf("%d",i);
}
第二个变量i
(在循环体内声明的)不会影响第一个i
(在循环外声明的),因为它在不同的地方声明范围,即在循环内。
最后的最后 3 个来自因为最里面的 i
将在退出循环之前最后一次递增。所以对于:
printf("%d",i);
变量 i
将取值 3。
int i=8
是一个新变量的声明(声明并初始化新变量),它在局部范围内,从更一般的范围中隐藏现有变量。
换句话说:
- 先
int i
定义变量;
for
使用该变量并用 0
初始化它并开始一个循环;
int i=8
- 因为它是用 int
编写的 - 定义了新的局部变量,因为它与外部范围的 i
具有相同的名称 - 隐藏它(“隐藏”是一个条款)。因此循环中的更多代码使用新的本地 i
设置为 8
.
- 内部
printf("%d",i);
打印 8
.
- 循环结束,局部范围被擦除,因此内部
i=8
也被擦除。
for
位于循环范围之外(在更一般的范围内)。 for
条件使用外部变量,在步骤 #2 中设置为 i=0
。因此 for
在第二个循环中指示递增 (i++
) 它,因此 i=1
通过了 i <= 2
检查。所以for
确实开始执行下一个内部代码循环。
- 内部
for
循环外部 i
被内部 int i=8
遮蔽...(步骤 #3)。
简而言之:这是因为代码用int i
声明了一个新变量。
好的作风是:
for(int i=0;i<=2;i++)
- 始终在一条指令中声明和初始化变量。
您在循环体内修改的变量 i
与 for
循环之前定义并在循环测试中使用的 i
不同。
int i
定义了一个只能在循环体内访问的新变量,它是一个有自己作用域的块。
因此代码打印 8
3 次,每次循环迭代一次,3
是循环后主体的变量 i
的值。
这是一个修改后的版本,它将按预期打印 89
:
#include <stdio.h>
int main() {
int i;
for (i = 0; i <= 2; i++) {
i = 8;
printf("%d", i);
}
printf("%d", i);
return 0;
}
它将i
设置为8
并在循环体内打印8
用于第一次迭代,然后i
递增,9
更大比 2
所以循环退出并且 9
由最后的 printf
.
打印
变量 i
在循环的第一个条目处变为 8
。那下次条件i <= 2
怎么满足呢?
#include <stdio.h>
int main()
{
int i;
for (i = 0; i <= 2; i++)
{
int i = 8;
printf("%d", i);
}
printf("%d", i);
return 0;
}
它在 i = 0、i = 1 和 i = 2 的循环中打印 8
三次。
for(i=0;i<=2;i++)
{
int i=8;
printf("%d",i);
}
第二个变量i
(在循环体内声明的)不会影响第一个i
(在循环外声明的),因为它在不同的地方声明范围,即在循环内。
最后的最后 3 个来自因为最里面的 i
将在退出循环之前最后一次递增。所以对于:
printf("%d",i);
变量 i
将取值 3。
int i=8
是一个新变量的声明(声明并初始化新变量),它在局部范围内,从更一般的范围中隐藏现有变量。
换句话说:
- 先
int i
定义变量; for
使用该变量并用0
初始化它并开始一个循环;int i=8
- 因为它是用int
编写的 - 定义了新的局部变量,因为它与外部范围的i
具有相同的名称 - 隐藏它(“隐藏”是一个条款)。因此循环中的更多代码使用新的本地i
设置为8
.- 内部
printf("%d",i);
打印8
. - 循环结束,局部范围被擦除,因此内部
i=8
也被擦除。 for
位于循环范围之外(在更一般的范围内)。for
条件使用外部变量,在步骤 #2 中设置为i=0
。因此for
在第二个循环中指示递增 (i++
) 它,因此i=1
通过了i <= 2
检查。所以for
确实开始执行下一个内部代码循环。- 内部
for
循环外部i
被内部int i=8
遮蔽...(步骤 #3)。
简而言之:这是因为代码用int i
声明了一个新变量。
好的作风是:
for(int i=0;i<=2;i++)
- 始终在一条指令中声明和初始化变量。
您在循环体内修改的变量 i
与 for
循环之前定义并在循环测试中使用的 i
不同。
int i
定义了一个只能在循环体内访问的新变量,它是一个有自己作用域的块。
因此代码打印 8
3 次,每次循环迭代一次,3
是循环后主体的变量 i
的值。
这是一个修改后的版本,它将按预期打印 89
:
#include <stdio.h>
int main() {
int i;
for (i = 0; i <= 2; i++) {
i = 8;
printf("%d", i);
}
printf("%d", i);
return 0;
}
它将i
设置为8
并在循环体内打印8
用于第一次迭代,然后i
递增,9
更大比 2
所以循环退出并且 9
由最后的 printf
.