C 非静态变量初始化

C 非静态变量初始化,c,C,我正在读一本C编程常见问题的书。 这是这本书的一段 自动变量是在函数或块内定义的变量 没有static关键字的代码。这些变量没有定义 如果没有显式初始化,则返回值。如果你不 初始化自动变量时,必须确保为其赋值 在使用该值之前 这是我的密码: #include <stdio.h> int main (int argc, const char * argv[]) { { int x; printf("%d", x); } } #包

我正在读一本C编程常见问题的书。 这是这本书的一段

自动变量是在函数或块内定义的变量 没有static关键字的代码。这些变量没有定义 如果没有显式初始化,则返回值。如果你不 初始化自动变量时,必须确保为其赋值 在使用该值之前

这是我的密码:

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

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

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

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

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

int x;
应该说

int x = 0;

如果那是你想要的。对于某些C编译器,可能在调用printf的点处x是-23157263。

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

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

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


阅读更多信息:

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


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

我记得,在某些情况下,当使用调试标志编译代码时,Visual Studio会(可能仍然会)将自动变量设置为0或null。正如其他人所说,您当然不应该依赖任何默认值。

哪个环境(操作系统、编译器等)?谁说它已初始化?也许只是运气好,内存中的数据实际上是零?我认为调试模式会自动将很多变量初始化为零;您是否尝试过在版本中构建和运行?您是否希望输出“未初始化”?:)