Q这个臭名昭著的空指针究竟是什么?
A语言定义规定,对于每种指针类型,都有一个特殊的值——“空指针”——该值可与其他所有指针值区分开来,并且“保证与指向任何对象或函数的指针不相等”。也就是说,空指针明确地不指向任何地方;它不是任何对象或函数的地址。取地址运算符&永远不会产生空指针,成功调用malloc也不会。[脚注](malloc失败时会返回空指针,这是空指针的典型用法:作为具有其他含义的“特殊”指针值,通常表示“未分配”或“尚未指向任何地方”。)
空指针在概念上与未初始化指针不同。空指针已知不指向任何对象或函数;未初始化指针可能指向任何地方。另请参阅问题 1.30、7.1 和 7.31。
如上所述,每种指针类型都有一个空指针,并且不同类型空指针的内部值可能不同。尽管程序员无需了解内部值,但编译器必须始终获悉需要哪种类型的空指针,以便在必要时进行区分(请参阅问题 5.2、5.5 和 5.6)。
参考文献:K&R1 第 5.4 节 pp. 97-8
K&R2 第 5.4 节 p. 102
ISO 第 6.2.2.3 节
Rationale 第 3.2.2.3 节
H&S 第 5.3.2 节 pp. 121-3