Null ポインター: なぜゼロにアドレスするのか?
C のようなプログラミング言語では、値がゼロのポインター (ヌル ポインター) を処理すると、次のような疑問が生じます。メモリのアドレス指定とその使用法の有効性。
無効なアドレスまたは抽象化?
メモリのアドレス指定は通常 0 から始まりますが、これを null ポインタに使用すると矛盾しているように見えるかもしれません。ただし、ヌル ポインタは実際のメモリ アドレスではありません。むしろ、これは C 標準によって定義された抽象化です。ソース コード内の定数値 0 以外に、コンパイラは任意の値を使用して null ポインターを実装できます。
ゼロの選択
C 標準では、null としてゼロが選択されました。いくつかの理由によるポインター値:
Null ポインターとしての負の値
Null ポインターとして負の値を考慮できますが、C 標準ではセンチネルを選択する必要がありました。価値。さらに、アドレスに符号付き整数を使用すると、正の値のみが有効なアドレスを表すため、アドレス空間が無駄になる可能性があります。
実装の違い
一方、null ポインタ リテラルは値 0 は一貫していますが、コンパイラは null ポインタを異なる方法で実装する可能性があります。専用の「無効な」ポインタ値を使用することも、プラットフォームのアーキテクチャに応じて 0 を別の値にマップすることもできます。
概要
要約すると、null はC のポインタは、定数値 0 によって定義される抽象化です。コンパイラは、有効なメモリ アドレスと等しくないこと、およびすべてが null であることを保証しながら、別の方法でこれを実装できます。ポインタは等しいと比較されます。 Null ポインターとしてゼロを選択することは、技術的および実用的な理由から行われており、プログラミング言語で広く受け入れられている規則となっています。
以上がC で Null ポインターを表すためにゼロが使用されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。