6.11 為什麼有那麼多關於空指針的疑惑?為什麼這些問題如此經常地出現?

C 程序員傳統上喜歡知道很多 (可能比他們需要知道的還要多) 關於機器實現的細節。 空指針在源碼和大多數機器實現中都用零來表示的事實導致了很多無根據的猜測。 而預處理宏 (NULL) 的使用又似乎在暗示這個值可能在某個時刻或者在某種怪異的機 器上會改變。``if(p == 0)" 這種結構又很容易被誤認為在比較之前把 p 轉成了整 數類型, 而不是把 0 轉成了指針類型。最後, 術語 ``空" 的幾種用法 (如上文 問題 5.10 所列出的) 之間的區別又可能被忽視。

衝出這些迷惘的一個好辦法是想像 C 使用一個關鍵字 (或許象 Pascal 那樣, 用  ``nil") 作為空指針常數。編譯器要麼在源代碼沒有歧義的時候把 ``nil" 轉成適 當類型的空指針, 或者有歧義的時候發出提示。現在事實上, C 語言的空指針常 數關鍵字不是 ``nil" 而是 ``0", 這在多數情況下都能正常工作, 除了一個未加修飾 的 ``0" 用在非指針上下文的時候, 編譯器把它生成整數 0 而不是發出錯誤信息, 如果那個未加修飾的 0 是應該是空指針常數, 那麼生成的程序不行。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)