ポインタ変数を何も指していない状態にするためには null 値を設定します。
ポインタ変数に null 値を設定するためには数値の0を代入します。このようにして作った null 値を指しているポインタを null ポインタと呼びます。
int *pointer = 0;
ひとつ注意点があります。ポインタ変数は0を代入することで「何も指していないポインタ」、つまり null ポインタにすることができますが、 null ポインタの値が0とは限りません。つまり、次のようなコードは正しく動作しない可能性があります。
struct SomeStruct { int *pointerA; int *pointerB; int *pointerC; }; int main(int argc, char *argv[]) { struct SomeStruct sample; // 0 で初期化を試みる… // しかし null ポインタの値が 0 とは限らない! memset(&sample, 0, sizeof(SomeStruct)); return 0; }
Windows など、たいていの環境では正しく動作すると思いますが、一応 null ポインタの値が 0xABCDEF というような意味のわからない値でも良いことになっています。しかし、そのような環境でも null ポインタを作るためには0を代入する必要があるため注意が必要です。
しかし、たいていの方は0という数値の代わりに NULL 定数を使います。理由はその方が読みやすいからです。また、ほかの言語では null 値を意味するキーワードが存在するため、言語としてのスタイルをあわせておくという事情もあります。
int *pointer = NULL;
ちなみに次期 C++ 言語である C++0x では nullptr というキーワードの導入が検討されており、 NULL に変わる指定ができるようになる可能性があります。
Contributions