参照のための NULL ポインターの逆参照
C 標準では、参照を取得するための NULL ポインターの逆参照の動作に明示的に対処しています。この方法は、未定義の動作とみなされます。
以下の例では、
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
NULL ポインター ptr の逆参照の試行は、未定義の動作とみなされます。標準 (8.3.2/4「参照」) によると:
注: 特に、null 参照は、明確に定義されたプログラム内に存在できません。このような参照は、null ポインタを逆参照することで得られる「オブジェクト」にバインドすることになるため、未定義の動作が発生します。
したがって、への参照を割り当てると、逆参照された NULL ポインタは無効であり、動作は明確に定義されていません。逆参照された NULL ポインターから取得された参照を指す ptr2 を使用した場合の結果も未定義です。
NULL ポインターの逆参照の禁止の例外の 1 つは、sizeof 演算子と使用した場合です。このコンテキストでは、ポインターは実際には評価されないため、逆参照しても未定義の動作は発生しません。ただし、この例外は sizeof 演算子に限定されます。
以上がC で参照への NULL ポインターを逆参照するとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。