6.1 臭名昭著的空指针到底是什么?

语言定义中说明, 每一种指针类型都有一个特殊值 --- ``空指针" ---  它与同类型的其它所有指针值都不相同, 它 ``与任何对象或函数的指针值都不相等"。 也就是说, 取地址操作符 & 永远也不能得到空指针, 同样对 malloc() 的成功调用 也不会返回空指针, 如果失败, malloc() 的确返回空指针, 这是空指针的典型用法: 表示 ``未分配" 或者 ``尚未指向任何地方" 的指针。

空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。参见问题 1.10、 7.1 和  7.26

如上文所述, 每种指针类型都有一个空指针, 而不同类型的空指针的内部表示可能 不尽相同。尽管程序员不必知道内部值, 但编译器必须时刻明确需要那种空指针, 以便在需要的时候加以区分 (参见问题 5.2、 5.5 和   5.6)。

参考资料: [K&R1, Sec. 5.4 pp. 97-8]; [K&R2, Sec. 5.4 p. 102]; [ISO, Sec. 6.2.2.3]; [Rationale, Sec. 3.2.2.3]; [H&S, Sec. 5.3.2 pp. 121-3]。

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