トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> C/C++な話題 >> ヌルポインタ(Null pointer)について

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

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'」 を表記します。
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。