怎樣在程序里獲得一個(gè)空指針
根據語(yǔ)言定義, 在指針上下文中的常數0 會(huì )在編譯時(shí)轉換為空指針。也就是說(shuō), 在初始化、賦值或比較的時(shí)候, 如果一邊是指針類(lèi)型的值或表達式, 編譯器可以確定另一邊的常數0 為空指針并生成正確的空指針值。因此下邊的代碼段完全合法:
char *p = 0;
if(p != 0)
然而, 傳入函數的參數不一定被當作指針環(huán)境, 因而編譯器可能不能識別未加修飾的0 “表示” 指針。在函數調用的`上下文中生成空指針需要明確的類(lèi)型轉換,強制把0 看作指針。例如, Unix 系統調用execl 接受變長(cháng)的以空指針結束的字符指針參數。它應該如下正確調用:
execl(“/bin/sh”, “sh”, “-c”, “date”, (char *)0);
如果省略最后一個(gè)參數的(char *) 轉換, 則編譯器無(wú)從知道這是一個(gè)空指針,從而當作一個(gè)0 傳入。(注意很多Unix 手冊在這個(gè)例子上都弄錯了。
如果范圍內有函數原型, 則參數傳遞變?yōu)?ldquo;賦值上下文”, 從而可以安全省略多數類(lèi)型轉換, 因為原型告知編譯器需要指針, 使之把未加修飾的0 正確轉換為適當的指針。
函數原型不能為變長(cháng)參數列表中的可變參數提供類(lèi)型。在函數調用時(shí)對所有的空指針進(jìn)行類(lèi)型轉換可能是預防可變參數和無(wú)原型函數出問(wèn)題的最安全的辦法。
【怎樣在程序里獲得一個(gè)空指針】相關(guān)文章:
怎樣獲得Sun Java認證10-01
常用面試題目空指針到底是什么12-13
怎樣用英語(yǔ)要求獲得某物08-18
怎樣存款才能獲得更多利息08-18
怎樣煎煮中藥才能獲得好的療效08-17
英國留學(xué)生應該怎樣獲得CAS10-11