如果我在x
循环内定义0
,为什么编译器将int x;
的值显示为for
。但是,从int x
循环中删除for
时,x
的值为10
。
#include<stdio.h>
int main() {
int x = 0, i;
for(i = 1; i <= 10; i++) {
int x;
x = 10;
}
printf("%d", x);
}
答案 0 :(得分:2)
如果您的for循环中有int x
,则可以创建一个新的x
变量。这意味着您的程序中实际上有两个x
变量,一个可以从main()
函数访问,而另一个只能在for循环内访问。如果从for循环中访问x
,则编译器将选择最接近的那个。
如果您的for循环中没有int x
,则只会有一个x
,并且您的程序将输出10
。
答案 1 :(得分:1)
因为for循环中 int x
的范围仅限于for循环。
for(i = 1; i <= 10; i ++) { int x; x = 10; / 仅限于此循环,不能在for循环之外使用 / }
for循环之外的int x,但main()函数内部的int x将可用于main()内部的所有函数
如果您想获得i
的价值,可以尝试以下方法:
x=i;
代替
int x;
x=10;
答案 2 :(得分:1)
如前所述,如果在for
循环int x; x = 10;
内定义变量,它将创建一个仅在for
循环内访问的新变量。
因此,当您在x
中创建变量main
然后在x
循环中创建变量for
时,您当前将打印printf("%d", x);
指向第一个x
在main
中声明,这就是为什么它打印0的原因。这是因为您在0
行中将其初始化到int x = 0, i;
,并且它从未更改。您从未真正打印过在x
循环中启动的for
。
但是当您从int x;
循环中删除for
时,只有一个x
启动,并且您将x
的值更改为10
循环。当您打印x
时,它会为您提供10
,这是在for
循环内分配给它的值。
希望这不会造成混淆。