プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (5件)

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

    • good
    • 0

あなたは、C言語の変数に、何か”値”以外のものが入れられると考えているのですか?



プログラムを作る上で”無効なポインタの値”を表すものがあると何かと便利なので、NULLという定義が規定されましたが、その値は、有効なアドレス値でない必要があります。

「たまたまあなたの環境で、"0" を無効アドレス値に使えたので」ので、その値を使っているだけです。
(大体、0番地は、プロセスのアドレス空間で有効でない環境が多い)
    • good
    • 0

NULLマクロは右辺値である空ポインタ定数に展開されますので、(単項の)&演算子のオペランドにはなれないはずです。


処理系が何かわかりませんが、未定義の動作を引き起こしているのでしょう。

> アドレスの0番地とNULLは関係ないのでしょうか?

Cの仕様における「アドレス」とハードウェアの「アドレス」は必ずしも一致しませんが、いずれにせよ直接は関係ありません。

この回答への補足

&はいりませんでした。

補足日時:2011/05/14 12:02
    • good
    • 0

&NULL


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

この回答への補足

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

補足日時:2011/05/14 12:00
    • good
    • 0

NULLポインタの意味は「どのアドレスも指していないポインタ」です。


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

たいていは
#define NULL (void *)0

#define NULL 0
で定義されています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/05/14 12:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!