参照のための NULL ポインターの逆参照: 解釈と標準
C では、次のコードは標準が何を規定しているかという疑問を引き起こします。
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
具体的には、NULL ポインターの逆参照は許可されていますか?
標準解釈
C 標準によれば、NULL ポインタの逆参照は未定義の動作とみなされます。これは、標準のセクション 8.3.2/4 で明示的に述べられています。
注: 特に、null 参照は、明確に定義されたプログラム内に存在できません。そのような参照を作成する唯一の方法は次のとおりです。 null ポインタを逆参照することで得られた「オブジェクト」にバインドすると、未定義の動作が発生します。
実装影響
ただし、実際には、多くのコンパイラは、結果を NULL に設定するようにこの動作を実装しています。これは、提供されたコード スニペットの ptr2 に NULL の値が割り当てられることを意味します。
コンパイラ解釈
上記の動作は、によって保証されていないことに注意することが重要です。これは標準であり、コンパイラやプラットフォームによって異なる場合があります。たとえば、一部のコンパイラは、NULL ポインターを参照解除するときに例外を発生させたり、他のプラットフォーム固有のアクションを実行したりする場合があります。
特定の例外
このルールの 1 つの例外は、次の使用です。 NULL ポインターの sizeof 演算子の。このコンテキストでは、逆参照は実際には発生せず、sizeof を使用して、未定義の動作を引き起こすことなく型のサイズを決定できます。
以上がC で参照定義の動作を取得するために NULL ポインターを逆参照することはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。