怎樣在程式裡獲得乙個空指標?

2021-08-26 16:16:49 字數 936 閱讀 2194

根據語言定義, 在指標上下文中的常數 0 會在編譯時轉換為空指標。也就是說, 在初始化、 賦值或比較的時候, 如果一邊是指標型別的值或表示式, 編譯器可以 確定另一邊的常數 0 為空指標並生成正確的空指標值。因此下邊的**段完全 合法:

char *p = 0;

if(p != 0)

參見問題 

5.3。

然而, 傳入函式的引數不一定被當作指標環境, 因而編譯器可能不能識別未加 修飾的 0 ``表示" 指標。在函式呼叫的上下文中生成空指標需要明確的型別轉換, 強制把 0 看作指標。例如, unix 系統呼叫 execl 接受變長的以空指標結束 的字元指標引數。它應該如下正確呼叫:

execl("/bin/sh", "sh", "-c", "date", (char *)0);
如果省略最後乙個引數的 (char *) 轉換, 則編譯器無從知道這是乙個空指標, 從而當作乙個 0 傳入。(注意很多 unix 手冊在這個例子上都弄錯了。)

如果範圍內有函式原型, 則引數傳遞變為 ``賦值上下文", 從而可以安全省略 多數型別轉換, 因為原型告知編譯器需要指標, 使之把未加修飾的 0  正確轉換為適當的指標。函式原型不能為變長引數列表中的可變引數提供型別。 (參見問題 15.3) 在函式呼叫時對所有的空指標進行型別轉換可能是預防 可變引數和無原型函式出問題的最安全的辦法。

摘要:可以使用未加修飾的 0:

需要顯示的型別轉換:

初始化函式呼叫, 作用域內無原型

賦值變參函式呼叫中的可變引數

比較固定引數的函式呼叫且在作用域內有原型

參考資料: [k&r1, sec. a7.7 p. 190, sec. a7.14 p. 192]; [k&r2, sec. a7.10 p. 207, sec. a7.17 p. 209]; [iso, sec. 6.2.2.3]; [h&s, sec. 4.6.3 p. 95, sec. 6.2.7 p. 171]。

乙個動態的指標陣列怎樣獲得長度

在debug 下 可以解決,但是在release 模式下 不知道如何解決 include using namespace std int getnewbuffersize void p int main int arry new int 10 for int i 0 i 10 i arry i 0 ...

在程式中怎樣實現乙個搜尋功能

如果我們的 也需要乙個搜尋功能,只提供乙個文字框和乙個鍵銨鈕。實現這樣的搜尋功能,也許搜尋的資訊分布有多個表中,或是某一表中其中一二個字段。下面insus.net就分享一下自己的實現方法,你看後可以參考,改正,優化。在程式中你可以設計乙個介面,簡單如下 銨鈕click事件 上面的click事件中,有...

怎樣在虛擬機器裡搭建乙個論壇《案例一》?

案例1 lamp安裝及啟用 1 案例1 lamp安裝及啟用 1.1 問題 1 安裝lamp平台各元件 安裝好軟體httpd mariadb server mariadb php php mysql 確認安裝結果2 啟用lamp 平台 開啟系統服務httpd mariadb,將上述服務設定為開機自執行...