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であるかどうかを確認することで、クラッシュを防ぎ、コードの堅牢性を高めることができます。プログラムが複雑になるにつれて、この安全確認は特に重要になります。
チャレンジ
簡単適切な NULL ポインタの初期化とチェックを実演する C プログラムを作成してください。プログラムは以下の手順で行う必要があります:
safe_ptrという名前の整数へのポインタを宣言し、NULL で初期化しますchar_ptrという名前の文字へのポインタを宣言し、NULL で初期化します- if 文を使用して
safe_ptrが NULL かどうかをチェックし、NULL であれば "safe_ptr is NULL" と出力します - if 文を使用して
char_ptrが NULL かどうかをチェックし、NULL であれば "char_ptr is NULL" と出力します printfと%pフォーマット指定子を使用して、safe_ptrに格納されているメモリ番地を出力します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;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。