5

在 c99 中,我的理解是比较两个不指向同一聚合内的指针会导致未定义的行为。给定一个聚合 A、一个已知指向 A 内的指针 p_good 和一个可能指向也可能不指向 A 内的指针 p_unknown,是否有可能构造一个具有已定义行为的可移植测试,以确定比较 p_good 和p_未知?

显然,这个测试本身不能违反比较指针的限制。

我怀疑答案是否定的,但我很乐意以其他方式显示。

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 回答