- 相關(guān)推薦
怎么定義NULL
怎么定義NULL
作為一種風(fēng)格, 很多人不愿意在程序中到處出現(xiàn)未加修飾的0。因此定義了預(yù)處理宏NULL (在 和其它幾個(gè)頭文件中) 為空指針常數(shù), 通常是0 或者((void *)0) 。希望區(qū)別整數(shù)0 和空指針0 的人可以在需要空指針的地方使用NULL。
使用NULL 只是一種風(fēng)格習(xí)慣; 預(yù)處理器把所有的NULL 都還原回0, 而編譯還是依照上文的描述處理指針上下文的0。特別是, 在函數(shù)調(diào)用的參數(shù)里, NULL之前(正如在0 之前) 的類型轉(zhuǎn)換還是需要。
NULL 只能用作指針常數(shù);
拓展1:將一個(gè)數(shù)的從第5位開始的7個(gè)數(shù)取出,其余位置0
解:#include
main()
{
int n;
printf(“input n:”);
scanf(“%d”,&n);
n=n&(∽(∽0<<7))<<5;
printf(“%d\n”,n);
};
拓展1:NULL指針
NULL指針是一個(gè)無類型指針,并且值為0。一個(gè)指針,擁有2個(gè)屬性--地址值和指針類型。兩者的作用是:1,地址值標(biāo)識(shí)變量的首地址(32位系統(tǒng)下指針的地址值占4字節(jié));2,指針類型告訴編譯器,應(yīng)該怎樣進(jìn)行接下來的數(shù)據(jù)訪問(int型數(shù)組和float型數(shù)組是不同的;數(shù)組訪問與結(jié)構(gòu)體訪問也是不同的;等等)。
NULL的出現(xiàn)是一種約定俗成,事實(shí)上它不是C語言中的關(guān)鍵字;把一個(gè)指針賦值為NULL,通常的說法是“將指針懸空”。這樣,指針就無法再進(jìn)行任何數(shù)據(jù)訪問了。
編程工作中有一類比較容易犯的錯(cuò)誤--指針地址未進(jìn)行正確的更新賦值就加以使用,這往往會(huì)造成很嚴(yán)重的后果(對(duì)內(nèi)存區(qū)進(jìn)行錯(cuò)誤的涂抹)。所以一個(gè)良好的習(xí)慣是,當(dāng)一個(gè)指針的工作稍事休息,先把它賦值為NULL,待到再度使用時(shí),重新對(duì)其賦值以及進(jìn)行指針類型轉(zhuǎn)化。
前面說到“NULL指針無法再進(jìn)行任何數(shù)據(jù)訪問”,其實(shí)是視編譯器功能而定的。0位置指向的是程序起始,對(duì)于不同的編譯器,NULL指針的操作結(jié)果是不同的:有些是不準(zhǔn)讀寫,有些是只讀,甚至讀寫都允許。編譯器是人定的。
引用網(wǎng)友win_hate在話題“關(guān)于NULL的不嚴(yán)謹(jǐn)”中的話來說:“如果說有誰不嚴(yán)謹(jǐn)了,那必定是讀取0位置的程序員,而不是C。C的設(shè)計(jì)哲學(xué)之一是:‘程序員知道自己在干什么--沒有安全帶’”。
【怎么定義NULL】相關(guān)文章:
CAD怎么自定義快捷鍵05-16
采購(gòu)的定義09-02
執(zhí)業(yè)藥師定義06-02
債券的定義與特征12-19
秘書的基本定義09-09
惡意軟件的定義10-11
論文提綱的定義及范文05-08
定義判斷筆試題07-31
普通話定義06-20
演講定義與技巧03-11