「NULLポインタ」と「演算の結果としてのアドレス0」との比較
ものすごく基本的な疑問です。。。
「C言語FAQ日本語訳」http://www.kouno.jp/home/c_faq/
ここの「05.ヌルポインター」を見ると以下のような意味の記述があります。
「NULLポインタは他のどんなポインタの値とも区別可能で、有効なポインタと比較しても等しくなる事はない」
「ポインタを書くべき場所に書かれた定数0はコンパイル時にNULLポインタに変換される」
そこで以下のプログラムを Borland C++ 5.5 for Win32 でコンパイル・実行してみたところ、
p1 == p2
とりました。これって変ですよね?
p1 は明示的に定数0で初期化しているのでNULLポインタですが、p2 は演算の結果としてアドレス0番地を指しているので、NULLポインタでは無いですよね? これはコンパイラが間違っていると思って良いのでしょうか?
#include <stdio.h>
int main()
{
char *p1,*p2;
p1 = 0;
p2 = (char *)1;
p2--;
if(p1 == p2){
printf("p1 == p2");
}
else{
printf("p1 != p2");
}
return 0;
}
お礼
有難うございました。