2012-09-02 40 views
0

我在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

回答

4
int a; 
printf("%d\n", a); 

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

+0

好的,这是什么意思?一个未初始化的变量,不会抛出一个错误,但会自动设置一些垃圾值在C? – Whiskey

+1

这意味着任何事情都可能发生,但最有可能打印一些垃圾。 – ouah

+0

那是weired然后..因为与python相同的概念给了NameError,并且Java采用默认值为0.谢谢..我想,编译器有一些问题:) – Whiskey

0

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

+1

不是“它会”,它*可能*等于另一个值。未定义的行为不一定是不一致的。 –

+0

对不起,我的错。 –

0

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

0

这是一个未定义的行为。

我在我的电脑中用同样的编译器得到了4334。