C言語をある程度触っていると、おそらく「ヌルポインタ/ナルポインタ」という言葉を一度は耳にするハズです。
(もしくは「NULL」という定義値を、コード中に一度は使用した事だと思います。)
ここでは、そんなヌルポインタについて、最低限知っておかなければならない知識を載せてみます^^;)
まず、C言語でのヌルポインタとは「何も指していない事が保証されているポインタ」の事です。
(※ 決して「初期化されていないポインタ」の事ではありません。)
ex)
malloc(), calloc()にて、メモリの取得に失敗した場合の戻り値
⇒ 何も指していない事が保証されているヌルポインタ
ex)
例えば、ローカル変数として右のポインタを宣言した場合 : char * p;
⇒ 初期化されていないポインタなので、ヌルポインタではない
そして、
ポインタを書くべきところに「0」を書くと、コンパイル時に自動でヌルポインタに変換
されます。
つまり
char * p = 0;
は、「ポインタ変数pにヌルポインタを設定する」という意味になり、
if (! p) { hogehoge... }
は、ifステートメントの挙動として
if (p == 0) { hogehoge... }
と同義の為、「ポインタ変数pがヌルポインタであれば、hogehoge...を実行する」という意味になります。
ところで、ヌルポインタを指定するために0を書く方法ですが、
可変個の引数を持つ関数にヌルポインタを渡す場合 等では、明示的なキャスティングが必要
となります。
つまり、
(char *)0
の様にしなければならないという意味です^^;)
まぁそんな理由があるわけで、ヌルポインタを表す文字列 「NULL」は、stdio.hにて以下の様に定義されています。(← VC++2010の場合)
#define NULL ((void *)0)
この為、定義値「NULL」を、ヌルポインタ以外の0が必要な場面(ex アスキーコードの0x00(NUL文字 等)では、使用してはいけません。
そういった場合は素直に 「0」 または 「'\0'」 を表記します。