我正在读一本关于C progaming faq的书。 这是本书的通过
自动变量是在函数或块内定义的变量 没有static关键字的代码。这些变量未定义 值,如果您没有显式初始化它们。如果你不这样做 初始化自动变量,您必须确保分配给它 在使用该值之前。
这是我的代码:
#include <stdio.h>
int main (int argc, const char * argv[])
{
{
int x;
printf("%d", x);
}
}
printf
的结果为0.为什么变量初始化?
答案 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。就像其他人所说的那样,你当然不应该指望任何默认值。