ホームページ > バックエンド開発 > C++ > NULL ポインタを逆参照して参照を取得することは C で適切に定義できますか?

NULL ポインタを逆参照して参照を取得することは C で適切に定義できますか?

Patricia Arquette
リリース: 2024-12-11 04:48:11
オリジナル
229 人が閲覧しました

Can Dereferencing a NULL Pointer to Get a Reference Be Well-Defined in C  ?

参照を取得するために NULL ポインターを逆参照できますか?

C 標準では、NULL ポインターの逆参照を未定義の動作として定義しています。ただし、次のような参照を取得するための NULL ポインター逆参照を伴うコード スニペットでは、疑問が生じます。

int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;
ログイン後にコピー

標準定義:

C 標準による(8.3.2/4「参照」)、明確に定義されたプログラム内に null 参照は存在できません。これは、そのような参照を作成するには、null ポインターを逆参照して取得した「オブジェクト」にバインドする必要があり、未定義の動作となるためです。

実装の詳細または適切に定義されていますか?

実際には、提供されたコード スニペットにより、ptr2 が NULL に設定されます。ただし、これは実装の詳細にすぎません。標準では、null ポインターの逆参照は未定義であると明示的に規定されています。

NULL ポインターの逆参照の影響:

一般に、null ポインターの逆参照はクラッシュにつながります。参照を取得するためにそれを使用する特定のケースでは、コンパイラーは参照をポインターとして実装し、実際の逆参照操作を排除します。それにもかかわらず、基本的な未定義の動作は残ります。

例外: sizeof 演算子

明確に定義された方法で null ポインターを逆参照する場合の例外は、sizeof 演算子です。 sizeof を使用する場合、オペランドは評価されず、逆参照操作が回避されます。

以上がNULL ポインタを逆参照して参照を取得することは C で適切に定義できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート