2.10 对于没有初始化的变量的初始值可以作怎样的假定? 如果一个全局变量初始值为 ``零", 它可否作为空指针或浮点零?

具有 ``静态'' 生存期的未初始化变量  (即, 在函数外声明的变量和 有静态存储类型的变量) 可以确保初始值为零, 就像程序员键入了  ``=0'' 一样。因此, 这些变量如果是指针会被初始化为正确的空指 针, 如果是浮点数会被初始化为 0.0 (或正确的类型, 参见第 5 章)。

具有 ``自动'' 生存期的变量 (即, 没有静态存储类型的局部变量) 如 果没有显示地初始化, 则包含的是垃圾内容。对垃圾内容不能作 任何有用的假设。

这些规则也适用于数组和结构 (称为 ``聚合体'' ); 对于初始化来说, 数组和结构都被认为是 ``变量''。

用 malloc() 和 realloc() 动态分配的内存也可能 包含垃圾数据, 因此必须由调用者正确地初始化。用 calloc()  获得的内存为全零, 但这对指针和浮点值不一定有用  (参见问题 7.26 和第 5 章)。

参考资料: [K&R1, Sec. 4.9 pp. 82-4]; [K&R2, Sec. 4.9 pp. 85-86]; [ISO, Sec. 6.5.7, Sec. 7.10.3.1, Sec. 7.10.5.3]; [H&S, Sec. 4.2.8 pp. 72-3, Sec. 4.6 pp. 92-3, Sec. 4.6.2 pp. 94-5, Sec. 4.6.3 p. 96, Sec. 16.1 p. 386.]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)