可能重复:
Why does the C standard leave use of indeterminate variables undefined?
当一个变量或指针没有被初始化为什么它拥有一个垃圾值时,这些实体是否有必要在内存中保存某种值?
答案 0 :(得分:2)
仅在C中初始化局部变量。初始化全局变量或静态变量。
在语言规范中没有初始化它们的原因是(或者是)性能:编译器不需要为调用堆栈上的本地值的隐式初始化发出机器代码。 (相反,Java初始化所有局部变量)
我的信念是你应该几乎总是初始化它们(例如对于整数为0,对于指针为NULL;对于像本地数组和结构这样的聚合,使用memset
)。一个好的编译器会优化几乎总是不需要的初始化。如果所有局部变量都已初始化,则代码的行为更具可重现性。
GCC编译器(至少是最新版本,例如4.6)对单元化变量提供了良好的警告。我强烈建议将-Wall
传递给GCC。
答案 1 :(得分:1)
变量或指针(也是变量)实际上是给予计算机内存中某个位置的名称。该内存是位的组合,这些位可以是0或1.现在当创建一个变量时,它所分配的内存位将具有某种状态,其中一些将是1和0。这是我们称之为垃圾,因为我们不知道这些位的值是什么,因此我们需要显式初始化这些变量。
答案 2 :(得分:0)
变量是(毕竟)内存中的位置,如果你没有指定它,没有人会为你清理这个位置。
例如,如果变量是局部变量(在函数中不是静态的),那么通常它的分配只是改变堆栈指针的值,而不改变堆栈上的值。在其他情况下,可能会使用一个寄存器来保存变量,同样,也没有人向您保证它将被清除。
答案 3 :(得分:0)
不,指针只是开头的数字,它们需要在引用之前使用分配原语与有效的内存位置相关联。
在最佳案例中取消引用单位指针会导致垃圾,但在最糟糕的情况下,它们会导致分段违规并导致程序崩溃。
答案 4 :(得分:0)
指针只是一个内存地址。当它被声明时,它显示存储在该存储器地址的数据。
在c
中分配指向正确值或NULL的指针是额外的工作。