C程序输出混乱

时间:2019-02-24 11:47:30

标签: c for-loop output

如果我在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);
}

3 个答案:

答案 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);指向第一个xmain中声明,这就是为什么它打印0的原因。这是因为您在0行中将其初始化到int x = 0, i;,并且它从未更改。您从未真正打印过在x循环中启动的for

但是当您从int x;循环中删除for时,只有一个x启动,并且您将x的值更改为10循环。当您打印x时,它会为您提供10,这是在for循环内分配给它的值。

希望这不会造成混淆。