TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【C言語】ヌルポインタ(Null pointer)について

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'」 を表記します。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ