【问题标题】:Confusing Output of C ProgramC程序的令人困惑的输出
【发布时间】:2019-02-24 11:47:30
【问题描述】:

如果我在for 循环内定义int x;,为什么编译器会将x 的值显示为0。但是当从for 循环中删除int x 时,x 的值将变为10

#include<stdio.h>
int main() {
    int x = 0, i;
    for(i = 1; i <= 10; i++) {
        int x;
        x = 10;
    }
    printf("%d", x);
}

【问题讨论】:

  • 内部 x 的范围将持续到 for 循环,而 x=0 的范围将持续到主函数。从大括号的角度来看。
  • 1.让编译器发出尽可能多的警告。2。谁教的循环从 1 开始并要求

标签: c for-loop output


【解决方案1】:

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

如果您的 for 循环中没有 int x,则只有一个 x,您的程序将输出 10

【讨论】:

    【解决方案2】:

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

    for(i=1;i仅限于本循环,不能在for循环外使用/ }

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

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

    x=i;

    而不是

    int x; x=10;

    【讨论】:

      【解决方案3】:

      如前所述,如果您在for 循环int x; x = 10; 内定义一个变量,它将创建一个只能在for 循环内访问的新变量。

      因此,当您在main 中创建变量x 然后在for 循环中创建变量x 时,您当前将打印printf("%d", x); 引用到xmain 中声明的第一个x,并且这就是它打印 0 的原因。这是因为您在 int x = 0, i; 行中将它启动到 0 并且它从未改变过。您从未真正打印出您在 for 循环中启动的 x

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

      希望这不会令人困惑。

      【讨论】:

        猜你喜欢
        • 2016-12-10
        • 1970-01-01
        • 2010-10-03
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 2010-12-23
        • 1970-01-01
        相关资源
        最近更新 更多