2016-12-06 91 views
0

像考慮我聲明兩個指針NULL。然後,如果我比較它們,結果是真實的。但是如果我們認爲NULL是「無」,那麼我們怎麼能說兩個「nothings」是平等的?那是出於某些特定的原因嗎?任何幫助讚賞。 :)爲什麼C中的空指針等於C中的另一個空指針?

+0

因爲只有_the_空指針。 – byxor

+1

考慮我聲明兩個整數是'5'。如果我比較他們,他們是平等的。同樣的想法適用於指針。 – byxor

+3

「爲什麼」的問題很難在SO上回答。答案是「因爲標準是這樣說的」並不令人滿意,「標準爲什麼這麼說?」這個問題。需要對所有標準作者的個性和目標進行精神分析,並瞭解標準制定過程。 –

回答

2

當您將指針指向NULL時,這意味着它指向的內存地址爲0x0

考慮下面的例子中,

#include <stdio.h> 

int main() 
{ 
     char *p = NULL; 
.. 
.. 

這裏,* P指向NULL。如果我們在gdb校驗,那麼我們將得到以下,

(gdb) p p 
$1 = 0x0 

0x0NULL值即0的地址,則無法訪問0x0內存地址。

(gdb) p *p 
Cannot access memory at address 0x0 

如果您嘗試訪問說segmentation fault

現在,如果你比較它們指向的內存地址0x0NULL然後兩個指針的內存地址0x0然後程序會崩潰這將是相同的只是作爲NULL默認值爲0

6

在C中,任何類型的兩個空指針保證比較相等。宏NULL被定義爲實現定義的空指針常量,其在C99中可以可移植地表示爲隱式地或顯式地轉換爲類型void *的整數值0。