在 c99 中,我的理解是比较两个不指向同一聚合内的指针会导致未定义的行为。给定一个聚合 A、一个已知指向 A 内的指针 p_good 和一个可能指向也可能不指向 A 内的指针 p_unknown,是否有可能构造一个具有已定义行为的可移植测试,以确定比较 p_good 和p_未知?
显然,这个测试本身不能违反比较指针的限制。
我怀疑答案是否定的,但我很乐意以其他方式显示。
在 c99 中,我的理解是比较两个不指向同一聚合内的指针会导致未定义的行为。给定一个聚合 A、一个已知指向 A 内的指针 p_good 和一个可能指向也可能不指向 A 内的指针 p_unknown,是否有可能构造一个具有已定义行为的可移植测试,以确定比较 p_good 和p_未知?
显然,这个测试本身不能违反比较指针的限制。
我怀疑答案是否定的,但我很乐意以其他方式显示。
你评论说:
构建问题的另一种方法是:给定聚合“A”和指针 p 的定义,是否有可能在不违反指向不同指针的不等式测试规则的情况下回答“p 是否在 A 内”这个问题?聚集体
我能有意义地解释这一点的唯一方法是你要么有一个类型的对象,要么有Aggregate type
一个指向一个对象的指针。那么答案很简单:
伪代码:
bool p_in_A = false;
for (each element in Aggregate A)
if (&element == p)
p_in_A = true;
无法判断流浪指针是否属于未知聚合对象(或指向聚合中的“中间”元素)。