• ベストアンサー

NULLポインタについて

NULLポインタはどこのアドレスも指さないポインタのことですよね。 printf("%p\n",&NULL);とすると00000000が 表示されます これはアドレスの0番地を指しているということでしょうか? でもNULLのアドレスが0番地なら、NULLポインタはどこのアドレスも指さないポインタというのと矛盾しますよね? アドレスの0番地とNULLは関係ないのでしょうか? よくわからないので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.5

NULLポインタの意味は「どのアドレスも指していないポインタ」です。 しかし、ポインタ変数は必ずどこかのアドレスを指しています。 (「データの無い変数」は存在しません) そこで、【(絶対に)使われることのないアドレス】として、0番地をNULLポインタとして代用しています。 たいていは #define NULL (void *)0 か #define NULL 0 で定義されています。

noname#132718
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

&NULL って、何のことなんでしょうか。

noname#132718
質問者

補足

すみません。よく考えたら&はいりませんね。 printf("%p\n",NULL);です 失礼しました

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

NULLマクロは右辺値である空ポインタ定数に展開されますので、(単項の)&演算子のオペランドにはなれないはずです。 処理系が何かわかりませんが、未定義の動作を引き起こしているのでしょう。 > アドレスの0番地とNULLは関係ないのでしょうか? Cの仕様における「アドレス」とハードウェアの「アドレス」は必ずしも一致しませんが、いずれにせよ直接は関係ありません。

noname#132718
質問者

補足

&はいりませんでした。

  • a_kwn
  • ベストアンサー率34% (8/23)
回答No.2

あなたは、C言語の変数に、何か”値”以外のものが入れられると考えているのですか? プログラムを作る上で”無効なポインタの値”を表すものがあると何かと便利なので、NULLという定義が規定されましたが、その値は、有効なアドレス値でない必要があります。 「たまたまあなたの環境で、"0" を無効アドレス値に使えたので」ので、その値を使っているだけです。 (大体、0番地は、プロセスのアドレス空間で有効でない環境が多い)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

NULLの実態のアドレスをNULLって定義してるだけじゃない?