5

c99 では、同じ集計内を指していない 2 つのポインターを比較すると、未定義の動作が発生することを理解しています。集約 A、A 内を指していることがわかっているポインター p_good、および A 内を指している場合とそうでない場合があるポインター p_unknown が与えられた場合、p_good と p_good を安全に比較できるかどうかを判断する、定義済みの動作を持つ移植可能なテストを構築できますか? p_unknown?

明らかに、このテスト自体がポインターの比較に関する制限に違反することはありません。

答えは「いいえ」だと思いますが、そうでないことを示していただければ幸いです。

4

1 に答える 1

5

あなたのコメント:

質問を組み立てる別の方法は次のようになります: 集合体 'A' とポインター p の定義が与えられた場合、異なるポインターの不等式テストに関する規則に違反することなく、'p は A 内を指していますか?' という質問に答えることができますか?骨材

これを有意義に解釈できる唯一の方法は、型のオブジェクトAggregate typeまたはオブジェクトへのポインターを持っているということです。答えは簡単です。

擬似コード:

bool p_in_A = false;
for (each element in Aggregate A)
    if (&element == p)
        p_in_A = true;

浮遊ポインタが未知の集合体オブジェクトに属しているかどうか (または集合体の「間」の要素を指しているかどうか) を判断する方法はありません。

于 2012-08-28T18:48:00.243 に答える