c語言裡面的指標可以指向任何有效的資料,也可以不指向任何東西;這後者即所謂的null指標。
當指向有效資料的時候,對它使用*做dereference操
作就可以取出資料來了;但是對不指向任何資料的指標
來進行*操作肯定就沒什麼意義了,對吧?所以對不指
向任何資料的指標做提領其實是個bug。
在現代的作業系統設計中,為了消除程式裡面的這種
bug,故意分配一些專門的不能訪問的記憶體頁,然後
將null指標安排在裡面。這樣當程式設計師不小心在自己
的程式中寫下對null指標的提領操作後,系統執行時
就會報錯。
在windows和linux中,這些記憶體頁被設計者安排在
0位址開始對應的那幾個頁上。實際上,這些頁面裡面
的任何位址都是不能被提領的。*((char *)0) 不可以,
*((char *)0x12)之類的位址也不可以。
很多人認為null指標其實就是指向0位址的指標,實際
上這是不準確的。雖然很少見,但也有處理器架構將
null指標安排在非零位址起始的頁面內。所以為了程
序的可移植性,在需要使用null指標的時候,用null
巨集而來不用0值來初始化指標變數。
c c 中空指標,空指標常量,NULL
如何是乙個指標變數成為空指標 如果 p 是乙個指標變數,則 p 0 p 0l p 0 p 3 3 p 0 17 中的任何一種賦值操作之後 對於 c 來說還可以是 p void 0 p 都成為乙個空指標,由系統保證空指標不指向任何實際的物件或者函式。null 是乙個標準規定的巨集定義,用來表示空指標常...
C void指標和NULL指標
我們將從指標的語法和使用並結合例子來討論他們的區別。void 指標 cpp void pointer variable void這是是作為乙個關鍵字來使用。例如 cpp int i float f int exf float test then exf i int型別指標指向int變數的位址空間,所...
C void指標和NULL指標
我們將從指標的語法和使用並結合例子來討論他們的區別。void 指標 void pointer variable void這是是作為乙個關鍵字來使用。例如 int i float f int exf float test then exf i int型別指標指向int變數的位址空間,所以是對的。如果寫...