2016-12-06 11 views
0

同様に、私は2つのポインタNULLを宣言します。そして、私がそれらを比較すると、結果は真です。しかし、NULLを「無」とみなすと、2つの「ノー」が等しいとはどういうことができますか?何か特別な理由がありますか?どんな助けもありがたい。 :)CのNullポインタがCの別のNullポインタと等しいのはなぜですか?

+0

_the_ヌルポインタしかないためです。 – byxor

+1

2つのintを '5'と宣言します。私がそれらを比較すれば、彼らは平等です。ポインタにも同じ考えが適用されます。 – byxor

+3

"なぜ"の質問は答えが難しいです。 「標準がそう言っているから」という答えは不満であり、「なぜ標準がそれを言っているのか」という質問はありません。すべての基準作成者の性格と目標の精神分析と、基準が作成されるプロセスの理解が必要です。 –

答えて

2

ポインタをNULLにポイントすると、メモリアドレス0x0を指していることを意味します。

は、たとえば、次の点を考慮ここ
#include <stdio.h> 

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

は、* pは NULLを指しています。我々は gdbにチェックした場合、我々は
(gdb) p p 
$1 = 0x0 

0x0

あなたは 0x0メモリアドレスにアクセスすることはできません NULL値、すなわち、0のアドレスで、次しまいます。

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

あなたはメモリアドレス0x0にアクセスしようとすると、プログラムはあなたがNULLすなわちメモリアドレス0x0を指している2つのポインタを比較した場合、それが唯一のと同じになります今segmentation fault

を言って墜落しますNULLの値はデフォルトで0です

6

Cでは、任意の型の2つのヌルポインタが等しいと比較されることが保証されています。 NULLは、実装定義のヌルポインタ定数としてと定義されています。C99は、暗黙的または明示的にタイプvoid *に変換された整数値0として移植可能に表現できます。

関連する問題