C 更改变量后的输出异常

C 更改变量后的输出异常,c,C,我正在使用DevC++作为我在windowsxp上的编译器。这是我的密码: #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; } 我不明白为什么变量a得到值2 int a; printf("%d\n", a); 未初始化的对象具有不确定的值。访问未初始

我正在使用DevC++作为我在windowsxp上的编译器。这是我的密码:

#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;
}
我不明白为什么变量
a
得到值
2

int a;
printf("%d\n", a);
未初始化的对象具有不确定的值。访问未初始化的对象是未定义的行为。如果您试图打印其值,则可能会打印出
2
,或
42
,或者您的应用程序可能会崩溃


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

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

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

它必须是
垃圾值
存储在编译器为变量
a
分配的地址,因为它不是初始化的。

它必须是
垃圾值
存储在编译器为变量
a
分配的地址,因为它没有初始化。

这是一个未定义的行为


我用同一个编译器在我的计算机中得到了4334。这是一个未定义的行为


我用同一个编译器在我的计算机上得到了4334。好的,这是什么意思?一个未初始化的变量,不会抛出错误,但会自动在C中设置一些垃圾值??这意味着任何事情都可能发生,但最有可能的是一些垃圾被打印出来。这很奇怪。。因为在python中,相同的概念会给出NameError,而Java默认值为0。谢谢我想,编译器有一些问题:)@NarayanKandel这些只是示例。它可以包含任何数字。这就是方法。@威士忌:C++不握你的手:)你的程序被编译成机器代码,当你运行它时,机器代码直接交给CPU,当然这是一个由硅制成的物理设备。在Python和Java中,您的程序被编译成一个中间代码,并提供给虚拟机。虚拟机提供比物理机更可预测的行为,但它们的速度较慢(通常这并不重要)。这意味着什么?一个未初始化的变量,不会抛出错误,但会自动在C中设置一些垃圾值??这意味着任何事情都可能发生,但最有可能的是一些垃圾被打印出来。这很奇怪。。因为在python中,相同的概念会给出NameError,而Java默认值为0。谢谢我想,编译器有一些问题:)@NarayanKandel这些只是示例。它可以包含任何数字。这就是方法。@威士忌:C++不握你的手:)你的程序被编译成机器代码,当你运行它时,机器代码直接交给CPU,当然这是一个由硅制成的物理设备。在Python和Java中,您的程序被编译成一个中间代码,并提供给虚拟机。虚拟机提供比物理机更可预测的行为,但它们的速度较慢(通常这并不重要)。不是“它会”,它可能等于另一个值。未定义的行为不一定是不一致的。不是“它会”,它可能等于另一个值。未定义的行为不一定是不一致的。
int a;
printf("%d\n", a);