在c語言中,null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值。
對於字串的結尾,使用』\0』,它的值也是0,但是讓人一看就知道這是字串的結尾,不是指標,也不是普通的數值。
在不同的系統中,null並非總是和0等同,null僅僅代表空值,也就是指向乙個不被使用的位址,在大多數系統中,都將0作為不被使用的位址,所以就有了類似這樣的定義。
0、0l、』\0』、3 - 3、0 * 17 以及 (void*)0 等都是空指標常量(注意 (char*) 0 不叫空指標常量,只是乙個空指標值)。
char *p=0;此時p就是乙個空指標,不指向任何實際物件。
因此,如果 p 是乙個指標變數,則 p = 0;、p = 0l;、p = 『\0』;、p = 3 - 3;、p = 0 * 17; 中的任何一種賦值操作之後(對於 c 來說還可以是 p = (void*)0;), p 都成為乙個空指標,由系統保證空指標不指向任何實際的物件或者函式。反過來說,任何物件或者函式的位址都不可能是空指標。
null 是乙個標準規定的巨集定義,用來表示空指標常量。因此,除了上面的各種賦值方式之外,還可以用 p = null; 來使 p 成為乙個空指標。
我們常見的空指標一般指向 0 位址,即空指標的內部用全 0 來表示(zero null pointer,零空指標);也有一些系統用一些特殊的位址值或者特殊的方式表示空指標(nonzero null pointer,非零空指標)。
這可以通過與空指標常量或者其它的空指標的比較來實現(注意與空指標的內部表示無關)。例如,假設 p 是乙個指標變數,q 是乙個同型別的空指標,要檢查 p 是否是乙個空指標,可以採用下列任意形式之一——它們在實現的功能上都是等價的,所不同的只是風格的差別。
指標變數 p 是空指標的判斷:
if ( p == 0 )
if ( p == 『\0』 )
if ( p == 3 - 3 )
if ( p == null ) /* 使用 null 必須包含相應的標準庫的標頭檔案 */
if ( null == p )
if ( !p )
if ( p == q )
malloc 函式是標準 c 規定的庫函式。在標準中明確規定了在其記憶體分配失敗時返回的是乙個 「null pointer」(空指標)。
NULL和0的區別
先看下面一段 輸出什麼 include intmain 輸出 單步除錯可以看出執行int p null,p的值為0x00000000,可以看出,null在實際底層呼叫中就是0 null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值 對於字串的結尾,使用 0...
c語言NULL和0區別及NULL詳解
首先,我們測試乙個程式 includeint main 輸出,單步除錯可以看出執行int p null,p的值為0x00000000,可以看出,null在實際底層呼叫中就是0 在c語言中,null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值 對於字串的結...
php中0, ,null和false的區別
php中很多還不懂php中0,null和false之間的區別,這些區別有時會影響到資料判斷的正確性和安全性,給程式的測試執行造成很多麻煩。先看乙個例子 str1 null str2 false echo str1 str2 相等 不相等 str3 str4 0 echo str3 str4 相等 不...