gpt4 book ai didi

c - 是否在两个不在同一数组中的指针上比较相等性定义行为?

转载 作者:行者123 更新时间:2023-12-02 05:36:14 25 4
gpt4 key购买 nike

考虑请

int main(void)
{
int a;
int b;
int* pa = &a;
int* pb = &b;

int e = pa == pb;
}

这个定义明确吗? papb没有指向同一数组中的元素。

最佳答案

如果我可以引用标准:§6.5.9¶2有关==的约束:

One of the following shall hold:

  • both operands have arithmetic type;
  • both operands are pointers to qualified or unqualified versions of compatible types;
  • one operand is a pointer to an object type and the other is a pointer to a qualified or unqualified version of void; or
  • one operand is a pointer and the other is a null pointer constant.


因此,按此-您的代码格式正确。这是明确定义的(为什么?因为以任何形式比较两个无关指针的 等于 standard doesn't mention 是 undefined 的行为(所有访问元素都不是。脚注109))。1

这是 §6.5.9¶6中所说的

Two pointers compare equal if and only if both are null pointers, both are pointers to the same object (including a pointer to an object and a subobject at its beginning) or function, both are pointers to one past the last element of the same array object, or one is a pointer to one past the end of one array object and the other is a pointer to the start of a different array object that happens to immediately follow the first array object in the address space



1)链接的节(第6.5.9节第6节)描述了使用 ==比较的两个指针何时相等。根据法律,现在我们可以说所有其他情况都不相等。
对于没有明确规定的权利要求中的任何一项,没有任何权利要求得到明确定义。

需要说明的是-关系运算符的规则与相等运算符的规则完全不同。 §6.5.8¶5部分(关系运算符的语义)

When two pointers are compared, the result depends on the relative locations in the address space of the objects pointed to. .. In all other cases, the behavior is undefined.



清楚地提到这一点-甚至要具有可比性-他们必须遵循上述标准。因此,对两个不相关的指针使用关系运算符将产生 undefined 的行为。

扩展讨论:

还有另一件事需要澄清-约束和语义完全不同。在为运营商制定标准的情况下,它首先提供了必须遵守的约束条件,但这只是问题的一个方面。语义呢?此后提到的标准。现在,当最初回答时,该回答集中在太多的约束而不是语义上。为什么这很重要?当我们研究关系运算符时,我们就会知道。检查它的约束-

One of the following shall hold:

  • both operands have real type; or
  • both operands are pointers to qualified or unqualified versions of compatible object types.


仅通过研究这一约束条件,就可以说 ptr < NULL定义正确。嗯,事实并非如此,特别是从 §6.5.8¶5的语义中可以清楚地看出这一点。但是 ptr < NULL肯定是格式正确的,因为它受到施加在其上的约束的约束。

关于c - 是否在两个不在同一数组中的指针上比较相等性定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com