ホームページ >バックエンド開発 >C++ >C および C で Null ポインターを表すためにアドレス 0 が使用されるのはなぜですか?

C および C で Null ポインターを表すためにアドレス 0 が使用されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 18:58:111055ブラウズ

Why is Address Zero Used to Represent Null Pointers in C and C  ?

Null ポインタにアドレス 0 を使用する理由

C および C では、潜在的な危険を防ぐために、メモリを解放した後にポインタを 0 に設定することをお勧めします。 from は、メモリを取得できない場合は値 0 のポインタを返しますが、(p != 0) の場合は、malloc がそれらを再度解放します。通常、受信ポインタの有効性を検証するために使用されます。

メモリのアドレス指定は 0 から始まりますが、0 は他のアドレスと同じように有効ですか? もしそうなら、なぜ負の数値を使用しないのでしょうか? null?

概念の抽象化

null ポインタは単なる抽象概念、定数であり、アドレスは 0 です実際の関連性はありません。これを強調するために、C++0x は nullptr キーワードを追加しました。コンパイラは、定数 0 をプラットフォームに応じて別の数値に変換できますが、それが「実際の」アドレスと等しくないこと、および他の数値と等しいことを確認するだけです。 null pointer.

プラットフォームの制限

C によれば、歴史的には、今日の初期のシステムでは 0 が使用されていました。標準では NULL ポインタ定数を指定しているため、プラットフォームによっては 0 が最適な値ではない可能性があるため、コンパイラがそれを別の数値に変換する必要があります。

0 を選択した理由

アドレスのコンテキストでは負の数値は実際の意味を持たず、正と負のスペースは有効なアドレスと無駄な数値に分割されます。また、0 はどのデータ型でも表現できます。 null ポインターが満たす必要がある唯一の要件は、それが実際のオブジェクトへのポインターと等しくないこと、およびすべての null ポインターが互いに等しいことです。

最終的には、0 の選択は設計です。 null ポインタが必要な条件を満たしていることを確認するための決定。一方、特定のアドレスの一意の識別子として予約されています。

以上がC および C で Null ポインターを表すためにアドレス 0 が使用されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。