混淆C程序的输出

问题描述 投票:1回答:3

如果我在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);
}
c for-loop output
3个回答
2
投票

如果你的for循环中有int x,你可以创建一个新的x变量。这意味着您在程序中有效地拥有两个x变量,一个可以从main()函数访问,另一个只能在for循环中访问。如果从for循环中访问x,编译器将选择最接近的一个。

如果你不在你的for循环中有int x,那么只有一个x,你的程序会输出10


1
投票

因为for循环中int x的范围仅限于循环的范围。

for(i = 1; i <= 10; i ++){int x; X = 10; /仅限于此循环,不能使用for循环/}

而for x在for循环之外,但main()函数内部可用于main()内的所有函数

如果你想获得i的价值,你可以试试这个:

x=i;

代替

int x; x=10;


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循环中分配给它的值。

希望这不会令人困惑。

© www.soinside.com 2019 - 2024. All rights reserved.