非静态变量初始化

时间:2012-01-05 13:37:08

标签: c

我正在读一本关于C progaming faq的书。 这是本书的通过

  

自动变量是在函数或块内定义的变量   没有static关键字的代码。这些变量未定义   值,如果您没有显式初始化它们。如果你不这样做   初始化自动变量,您必须确保分配给它   在使用该值之前。

这是我的代码:

#include <stdio.h>
int main (int argc, const char * argv[])
{    
    {
        int x;
        printf("%d", x);
    }
}

printf的结果为0.为什么变量初始化?

7 个答案:

答案 0 :(得分:5)

对于静态和全局变量,它为0;默认情况下不会初始化自动变量。

在c语言中,非静态局部变量没有默认值。变量在成为变量之前保存内存中的内容。最好在使用c语言之前始终初始化非静态局部变量(或者至少在将其与其他东西进行比较之前)。另外,最好假设没有默认值,因为这会因语言和硬件而异。

了解详情:http://wiki.answers.com/Q/What_is_the_default_value_of_integer_in_c#ixzz1iaij7hRK

答案 1 :(得分:4)

未初始化。 x占用的内存单元仍具有早期使用的值。但是,x的值可能是任何值,因此您不能依赖它。

答案 2 :(得分:1)

未定义意味着它可以是任何东西,甚至是0.另一种实现可能具有不同的或随机的值。没有办法知道,你也不能相信它在每次执行时都是一样的。

答案 3 :(得分:1)

有些编译器会为您执行默认初始化,有些则不会。你不应该指望他们。这句话说

int x;

应该说

int x = 0;

如果这就是你想要的。对于某些C编译器,调用printf时x可能是-23157263。

答案 4 :(得分:1)

如果未明确初始化,automatic变量的初始值是不确定的。

Indeterminate表示未指定(可能是0或42)或陷阱表示。陷阱意味着读取未初始化的变量未定义行为(例如,使程序崩溃)。

答案 5 :(得分:0)

因为在放置x的存储空间中已经有0,但这只是“运气”,那个地方可能有任何数字或符号。 因此,为了确保始终获得相同的结果,您应该始终初始化变量。

答案 6 :(得分:0)

我记得在使用调试标志编译代码时,Visual Studio会(并且可能仍然)将自动变量设置为0或null。就像其他人所说的那样,你当然不应该指望任何默认值。