4

C標準に関する別の質問。私はこれをテストしましたが、常にNULL < ptrtrue になりptrますNULL。しかし、標準では、ポインターの演算と比較は配列の境界内でのみ定義されると述べていることは知っています。NULL < ptr特定の比較が合法かどうかはわかりません。

編集: K&R を読んでいて、次の引用を見つけました。

任意のポインタは、ゼロと等しいか等しくないかを意味のある形で比較できます。ただし、同じ配列のメンバーを指していないポインターとの演算または比較の動作は未定義です。

これが、この質問に対して既に与えられた回答に影響するかどうかはわかりません。いずれにせよ、is a pointerp > NULLが常に true を返すことが保証されているかどうかはまだわかりません。p!=NULL

4

2 に答える 2

6

NULL < ptrは無効です: null ポインターは関係的に比較できません。これを行うと、未定義の動作が発生します。

同じオブジェクト (配列内の要素または集合体のサブオブジェクト) を指すポインターのみを関係的に比較できることは正しいです。null ポインターはどのオブジェクトも指していないため、それを何かと比較することはできません。

于 2012-09-01T03:30:06.627 に答える
3

別の NULL との比較 (=真) か否か (=偽) のみが定義されています。

NULL は一般的にゼロとして定義されるため、通常はより小さいと比較されますが、実際には定義されていません

于 2012-09-01T03:31:48.140 に答える