這個問題還得從指針說起。。
C語言中的指針可以指向任何有效的數據,也可以
不指向任何東西;後者被稱為空指針。
當指向有效數據時,使用*對其進行解引用操作。
可以把數據拿出來;但是對於不指向任何數據的指針
操作*肯定沒意義吧?這其實是壹個
bug .
在現代操作系統設計中,為了消除這類程序。
Bug,故意分配壹個特殊的不可訪問的內存頁面,然後
在內部安排壹個空指針。這樣,當程序員在自己不小心的時候
在程序中寫下拾取空指針的操作後,系統運行。
您將報告壹個錯誤。
在windows和linux中,這樣的內存頁是由設計人員在
頁面上對應於開始的0地址。事實上,在這壹頁上,
沒有地址可以認領。*((char *)0)否,
也不允許使用*(char *)0x 12)之類的地址。
很多人認為空指針其實是指向地址0的指針。實際上,
其實這是不準確的。雖然很少,但也有壹些處理器架構
空指針從非零地址開始排列在頁面中。所以對於程來說
序列可移植性,當需要使用空指針時,使用NULL。
而不是用值0初始化指針變量。
妳可以訪問這裏的檔案:http://www.juliantec.info/mlist/archives/index.html.
但是今天,沒有這麽快,妳可以訪問這裏的記錄:
http://www.freelists.org/post/juliantec_list/char-0,1