當前位置:文思屋>學習教育>考研>

怎麼定義NULL

文思屋 人氣:2.56W

怎麼定義NULL

怎麼定義NULL

作為一種風格, 很多人不願意在程式中到處出現未加修飾的0。因此定義了預處理巨集NULL (在 和其它幾個頭檔案中) 為空指標常數, 通常是0 或者((void *)0) 。希望區別整數0 和空指標0 的人可以在需要空指標的地方使用NULL。

使用NULL 只是一種風格習慣; 前處理器把所有的NULL 都還原回0, 而編譯還是依照上文的描述處理指標上下文的0。特別是, 在函式呼叫的引數裡, NULL之前(正如在0 之前) 的`型別轉換還是需要。

NULL 只能用作指標常數;

拓展1:將一個數的從第5位開始的7個數取出,其餘位置0

解:#include

main()

{

int n;

printf(“input n:”);

scanf(“%d”,&n);

n=n&(∽(∽0<<7))<<5;

printf(“%dn”,n);

};

拓展1:NULL指標

NULL指標是一個無型別指標,並且值為0。一個指標,擁有2個屬性--地址值和指標型別。兩者的作用是:1,地址值標識變數的首地址(32位系統下指標的地址值佔4位元組);2,指標型別告訴編譯器,應該怎樣進行接下來的資料訪問(int型陣列和float型陣列是不同的;陣列訪問與結構體訪問也是不同的;等等)。

NULL的出現是一種約定俗成,事實上它不是C語言中的關鍵字;把一個指標賦值為NULL,通常的說法是“將指標懸空”。這樣,指標就無法再進行任何資料訪問了。

程式設計工作中有一類比較容易犯的錯誤--指標地址未進行正確的更新賦值就加以使用,這往往會造成很嚴重的後果(對記憶體區進行錯誤的塗抹)。所以一個良好的習慣是,當一個指標的工作稍事休息,先把它賦值為NULL,待到再度使用時,重新對其賦值以及進行指標型別轉化。

前面說到“NULL指標無法再進行任何資料訪問”,其實是視編譯器功能而定的。0位置指向的是程式起始,對於不同的編譯器,NULL指標的操作結果是不同的:有些是不準讀寫,有些是隻讀,甚至讀寫都允許。編譯器是人定的。

引用網友win_hate在話題“關於NULL的不嚴謹”中的話來說:“如果說有誰不嚴謹了,那必定是讀取0位置的程式設計師,而不是C。C的設計哲學之一是:‘程式設計師知道自己在幹什麼--沒有安全帶’”。

 

TAGS: