私はC/C++における定数の目的を理解しておりNULL
、それを表現する必要があることを理解しています。いくつかの内部的には。
私の質問は、C/C++のオブジェクトで0番地が無効なメモリ位置になる根本的な理由があるのでしょうか?それとも理論的にはこの予約により 1 バイトのメモリが「無駄」になるのでしょうか?
ベストアンサー1
ヌルポインタは実際には0である必要はありません。C仕様では、定数0の値がポインタのコンテキストで与えられた場合、コンパイラによってヌルとして扱われることが保証されていますが、
char *foo = (void *)1;
--foo;
// do something with foo
0アドレスにアクセスすることになりますが、必ずしもヌルポインターである必要はありません。ほとんどの場合、実際にそうなるのですが、必ずしもそうする必要はないので、そのバイトを無駄にする必要はありません。しかし、全体像から見ると、0でない場合は何かになるはずなので、1バイトが無駄になっています。どこか
編集: コメントが混乱していたため、NULL の使用を削除しました。また、ここでの主なメッセージは「null ポインター != 0、そして私が言おうとしている点を示す C/疑似コードがここにあります」です。実際にこれをコンパイルしようとしたり、型が適切かどうかを心配したりしないでください。意味は明らかです。