prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 1.30

Q我是否可以假设未显式初始化的变量和数组的初始值?
如果全局变量最初为“零”,这对空指针和浮点零是否足够好?


A具有 static 存储期的未初始化变量(即在函数外部声明的变量,以及使用存储类别静态声明的变量),都保证初始值为零,就像程序员键入“0”一样。因此,此类变量如果是指针,则隐式初始化为空指针(具有正确的类型;另请参阅第 5 节),如果它们是浮点数,则初始化为 0.0。[脚注]= 0'' 或 ``= {0}具有 automatic 存储期的变量(即没有

存储类的局部变量)在被显式初始化之前,其内容是垃圾值。(无法对垃圾值进行任何有用的预测。)如果它们具有初始化式,那么它们将在每次调用函数时(或对于内部块的局部变量,每次进入该块的顶部时[脚注])进行初始化。静态这些规则同样适用于数组和结构(称为 聚合类型);在初始化方面,数组和结构被视为“变量”。当自动存储期的数组或结构具有部分初始化式时,其余部分将初始化为 0,就像静态变量一样。[脚注] 另请参阅问题 1.31

最后,通过

mallocrealloc获得的动态分配的内存很可能包含垃圾值,必须由调用程序适当地进行初始化。通过calloc获得的内存是全零位的,但这对于指针或浮点值不一定有用(请参阅问题 7.31 和第 5 节)。

参考文献:K&R1 第 4.9 节,第 82-4 页
K&R2 第 4.9 节,第 85-86 页
ISO 第 6.5.7 节、第 7.10.3.1 节、第 7.10.5.3 节
H&S 第 4.2.8 节,第 72-3 页;第 4.6 节,第 92-3 页;第 4.6.2 节,第 94-5 页;第 4.6.3 节,第 96 页;第 16.1 节,第 386 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管