Menu
Coddy logo textTech

NULLポインタ

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 5/63。

ポインタを宣言する必要があるものの、すぐに割り当てるための有効なメモリアドレスがない場合があります。このような状況では、ポインタをNULLと呼ばれる特別な値で初期化することが重要です。

NULLポインタとは、有効なメモリアドレスを指していないポインタのことです。C言語では、NULLは通常0または(void*)0として定義されます。ポインタをNULLで初期化することは、そのポインタが現在、有用なものを何も指していないことを明示的に示していることになります。

int *ptr = NULL;    // ポインタをNULLに初期化
printf("%p", ptr);  // これは0または(nil)を出力します

ポインタをNULLで初期化することは、ポインタにランダムなゴミ(ガベージ)値が含まれるのを防ぐため、良いプログラミングの習慣と考えられています。初期化されていないポインタは、任意のランダムなメモリ番地を含んでいる可能性があり、誤ってそれを使用しようとした場合に予測不可能な動作につながる恐れがあります。

ポインタを使用する前にそれがNULLであるかどうかを確認することで、クラッシュを防ぎ、コードの堅牢性を高めることができます。プログラムが複雑になるにつれて、この安全確認は特に重要になります。

challenge icon

チャレンジ

簡単

適切な NULL ポインタの初期化とチェックを実演する C プログラムを作成してください。プログラムは以下の手順で行う必要があります:

  1. safe_ptr という名前の整数へのポインタを宣言し、NULL で初期化します
  2. char_ptr という名前の文字へのポインタを宣言し、NULL で初期化します
  3. if 文を使用して safe_ptr が NULL かどうかをチェックし、NULL であれば "safe_ptr is NULL" と出力します
  4. if 文を使用して char_ptr が NULL かどうかをチェックし、NULL であれば "char_ptr is NULL" と出力します
  5. printf%p フォーマット指定子を使用して、safe_ptr に格納されているメモリ番地を出力します
  6. printf%p フォーマット指定子を使用して、char_ptr に格納されているメモリ番地を出力します

出力は以下の形式で結果を表示する必要があります:

safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]

実際のメモリ番地は、システムによって 0、(nil)、または同様の NULL 表現として表示されますが、フォーマットとラベルは上記と完全に一致している必要があります。

チートシート

NULLポインタは、有効なメモリ番地を指していないポインタのことです。C言語では、NULLは通常0または(void*)0として定義されています。

ランダムなゴミ値を防ぐために、ポインタをNULLで初期化します:

int *ptr = NULL;    // ポインタをNULLで初期化
printf("%p", ptr);  // これは0または(nil)を出力します

クラッシュを防ぐために、ポインタを使用する前にNULLかどうかを確認します:

if (ptr == NULL) {
    // NULLの場合を安全に処理
}

自分で試してみよう

#include <stdio.h>

int main() {
    // TODO: ここにコードを記述してください
    // ポインタの宣言と初期化
    // ポインタがNULLかどうかを確認
    // 必要な出力を表示
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン