【问题标题】:Weird output after changing the variable更改变量后的奇怪输出
【发布时间】:2012-09-02 15:56:12
【问题描述】:

我在 Windows XP 上使用 DevC++ 作为我的编译器。这是我的代码:

#include<stdio.h>
int main(void){
  int a;
  printf("%d\n", a);
  int b = a;
  a = 10;
  printf("%d %d %d", a, b, a);
  getch();
  return 0;
}

输出:

2
10 2 10

我不明白为什么变量a 的值是2

【问题讨论】:

    标签: c


    【解决方案1】:
    int a;
    printf("%d\n", a);
    

    未初始化的对象具有不确定的值。访问未初始化的对象是未定义的行为。如果您尝试打印它的值,您可以打印2,或42,否则您的应用程序可能会崩溃。

    【讨论】:

    • 好的,这是什么意思?一个未初始化的变量,不会抛出错误,但会在 C 中自动设置一些垃圾值??
    • 这意味着任何事情都可能发生,但很可能会打印一些垃圾。
    • 那很奇怪..因为与python相同的概念给出了NameError,而Java将默认值设为0。谢谢..我想,编译器有问题:)
    • @NarayanKandel 这些只是示例。它可以包含任何数字。这就是indeterminate 的意思。
    • @Whiskey:C++ 不会以那种方式牵着你的手 :) 你的程序被编译成机器码,当你运行它时,机器码会直接交给 CPU,这当然是是由硅制成的物理设备。在 Python 和 Java 中,您的程序被编译成中间代码,该代码提供给虚拟机。虚拟机提供比物理机更可预测的行为,但速度较慢(通常这并不重要)。
    【解决方案2】:

    变量a 没有被你初始化,所以它有一些随机值。在另一个应用程序运行/计算机重新启动后,它可能等于另一个值。您必须分配一些值以确保 a 等于它。

    【讨论】:

    • 不是“它会”,它可能等于另一个值。未定义的行为不必不一致。
    【解决方案3】:

    这是一种未定义的行为。

    我用相同的编译器在我的计算机上得到了 4334。

    【讨论】:

      【解决方案4】:

      它必须是garbage value 存储在编译器为变量a 分配的地址中,因为它没有被初始化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        • 2014-06-15
        • 2018-12-16
        相关资源
        最近更新 更多