1. ホーム
  2. c++

[解決済み] C/C++の(nil)ポインタ

2022-02-10 23:22:55

質問

あるプロジェクトで作業をしているのですが、このエラーに何度も遭遇し、プロジェクトを完了させることができません。プログラムの実行中に作られるオブジェクトを指すポインタの1つを初期化し、それを NULL . そして、それが何に設定されているかを確認するためにチェックすると、その値は nil . どうしてこんなことが可能なのでしょうか?C言語でnilポインタが存在するとは思わなかったのですが、これを回避する方法はあるのでしょうか?

struct order_line *front = NULL;
...
printf("Head: %p\n", front);  // prints -> Head: (nil)

解決方法は?

%pprintf はポインタ型をフォーマットします。これは、ヌルポインタを区別して表示することになります。 (nil) はポインタの文脈では特別な値だからです。ヌルポインタに対して0を出力したい場合は、ポインタを整数にキャストして %d の代わりに

printf("Head: %d\n", (int) front);

まだ使えるかもしれないので、オリジナルの回答。

NULL は、次のように定義されたマクロです。 0 または ((void *) 0) へのポインタを設定した場合、そのポインタは NULL に設定するのと全く同じです。 0 . これは、アドレス0にあるメモリがプログラムに割り当てられることがないため、ヌルポインタを宣言する目的で動作します。