- ベストアンサー
NULLポインタについて
NULLポインタはどこのアドレスも指さないポインタのことですよね。 printf("%p\n",&NULL);とすると00000000が 表示されます これはアドレスの0番地を指しているということでしょうか? でもNULLのアドレスが0番地なら、NULLポインタはどこのアドレスも指さないポインタというのと矛盾しますよね? アドレスの0番地とNULLは関係ないのでしょうか? よくわからないので教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
NULLポインタの意味は「どのアドレスも指していないポインタ」です。 しかし、ポインタ変数は必ずどこかのアドレスを指しています。 (「データの無い変数」は存在しません) そこで、【(絶対に)使われることのないアドレス】として、0番地をNULLポインタとして代用しています。 たいていは #define NULL (void *)0 か #define NULL 0 で定義されています。
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
&NULL って、何のことなんでしょうか。
補足
すみません。よく考えたら&はいりませんね。 printf("%p\n",NULL);です 失礼しました
- jacta
- ベストアンサー率26% (845/3158)
NULLマクロは右辺値である空ポインタ定数に展開されますので、(単項の)&演算子のオペランドにはなれないはずです。 処理系が何かわかりませんが、未定義の動作を引き起こしているのでしょう。 > アドレスの0番地とNULLは関係ないのでしょうか? Cの仕様における「アドレス」とハードウェアの「アドレス」は必ずしも一致しませんが、いずれにせよ直接は関係ありません。
補足
&はいりませんでした。
- a_kwn
- ベストアンサー率34% (8/23)
あなたは、C言語の変数に、何か”値”以外のものが入れられると考えているのですか? プログラムを作る上で”無効なポインタの値”を表すものがあると何かと便利なので、NULLという定義が規定されましたが、その値は、有効なアドレス値でない必要があります。 「たまたまあなたの環境で、"0" を無効アドレス値に使えたので」ので、その値を使っているだけです。 (大体、0番地は、プロセスのアドレス空間で有効でない環境が多い)
- SAYKA
- ベストアンサー率34% (944/2776)
NULLの実態のアドレスをNULLって定義してるだけじゃない?
お礼
ありがとうございました。