ポインタの初期化:C++

 C++において、クラスポインタを宣言するだけでは、不定参照となる。

 自分では、宣言と同時に初期化をするように習慣づいているのだが、周りには、初期化をしないで使う人がいる。Javaは、明示的に初期化しなくても初期化されるので、Javaからプログラミングを始めたのであれば、初期化の習慣がないのもうなづけるのだが、周りでJavaができるのは、私だけである。周りのみんなは、Cで育ったはず。Cもポインタは初期化しないと不定参照になるはず。。。何故だ?何故、初期化しないのだ?

一応、以下のような処理で確認してみた。

long* p1;
long* p2 = 0;
long* p3 = NULL;
LOG_DEBUG(" @@@@@ p1( %p ) p2( %p ) p3( %p ) NULL( %p )", p1, p2, p3, NULL);
if (p1 != NULL) LOG_DEBUG(" @@@@@ p1はNULLではありません");
if (p2 != NULL) LOG_DEBUG(" @@@@@ p2はNULLではありません");
if (p3 != NULL) LOG_DEBUG(" @@@@@ p3はNULLではありません");

 これを実行すると以下のようなログが出力された。

2011/07/06 20:26:23:922 DEBUG @@@@@ p1( 0xbfffadd4 ) p2( (nil) ) p3( (nil) ) NULL( (nil) )
2011/07/06 20:26:23:922 DEBUG @@@@@ p1はNULLではありません
2011/07/06 20:27:54:852 DEBUG @@@@@ p1( 0xbfffae28 ) p2( (nil) ) p3( (nil) ) NULL( (nil) )
2011/07/06 20:27:54:852 DEBUG @@@@@ p1はNULLではありません

 やはり、宣言しただけでは、不定参照となる。

 ここで、初期化には、0を使うのか、NULLを使うのかという問題がある。ネットで調べると、C++では、0を使うべきというのが多い気がする。上の例では、0とNULLで初期化した場合の結果は同じとなった。詳細は、別途行うこととする。