關於C程式中空指標 null指標 的設計哲學

2021-06-13 16:36:20 字數 649 閱讀 7948

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變數的位址空間,所以是對的。如果寫...