等しいかどうかのポインターの比較: C 標準のウォークスルー
C では、ポインターの等しいかどうかを比較するのは簡単ですが、遵守する必要があります。言語標準で概説されている特定のルールに準拠します。
等価演算子(==, !=)
同じ型のポインターの場合、== または != を使用した等価比較により直感的な結果が得られます。 2 つのポインターが両方とも null である場合、両方とも同じ関数を指す場合、または両方とも同じアドレスを指す場合は、等しいと見なされます。
関係演算子 (<、>、<=、>=) )
同じ型のポインターは、関係演算子を使用して比較することもできます。それらが同じオブジェクトまたは関数を指している場合、それらは期待どおりに比較されます。p<=q と p>=q は true を生成しますが、pq は false を生成します。
ただし、ポインターが指している場合は、異なるオブジェクトまたは関数に適用した場合、またはそれらの 1 つが null の場合、リレーショナル比較の結果は不定です。これは、それらの動作が実装に依存することを意味します。
ルールの例外
配列要素: ポインタが同じ配列の要素を指している場合、より高いインデックスを持つオブジェクトへのポインタはより大きいと比較されます。
Unionメンバー: ポインターが同じ共用体のメンバーを指している場合、それらは void* への変換後に等しいと比較されます。
その他のタイプのポインター:
警告
ボーナス: 標準ライブラリ ヘルパー
標準ライブラリは、テンプレート関数 std::greater、std::less、std::greater_equal、およびstd::less_equal は、組み込み演算子ができない場合でも、あらゆるタイプのポインターの順序付けに使用できます。
以上がC でポインターの等価性と順序付けを安全に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。