6.14 說真的, 真有機器用非零空指針嗎, 或者不同類型用不同的表達?

至少 PL/I, Prime 50 系列用段 07777, 偏移 0 作為空指針。後來的型號使用段 0, 偏移 0 作為 C 的空指針, 迫使類似 TCNP (測試 C 空指針) 的指令明顯地成了現成 的作出錯誤猜想的蹩腳 C 代碼。舊些的按字尋址的 Prime 機器同樣因為要求字節 指針 (char *) 比字指針 (int *) 長而臭名昭著。

Data General 的 Eclipse MV 系列支持三種結構的指針格式 (字、字節和比特指針), C 編譯器使用了其中之二:char * 和 void * 使用字節指針, 而其它的使用字指針。

某些 Honeywell-Bull 大型機使用比特模式 06000 作為 (內部的) 空指針。

CDC Cyber 180 系列使用包含環 (ring), 段和位移的 48 位指針。多數用戶  (在環 11 上) 使用的空指針為 0xB00000000000。 在舊的 1 次補碼的 CDC 機器上用 全 1 表示各種數據, 包括非法指針, 是十分常見的事情。

舊的 HP 3000 系列對字節地址和字地址使用不同的尋址模式; 正如上面的機器一樣, 它因此也使用不同的形式表達 char * 和 void * 型指針及其它指針。

Symbolics Lisp 機器是一種標籤結構, 它甚至沒有傳統的數字指針; 它使用  <NIL, 0> 對 (通常是不存在的  <對像, 偏移> 句柄) 作為 C 空指針。

根據使用的 ``內存模式", 8086 系列處理器 (PC 兼容機) 可能使用 16 位的數據指針 和 32 位的函數指針, 或者相反。

一些 64 位的 Cray 機器在一個字的低 48 位表示 int *; char * 使用高 16 位的 某些位表示一個字節在一個字中的偏移。

參考資料: [K&R1, Sec. A14.4 p. 211]。

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