在处理C语言(有时候是C++)中的指针时,我遇到了一个有趣的例子:假设我们有一个如下所示的结构体(C结构体):
struct qwe
{
int someData;
qwe *ptr;
}
然后是一些代码:
struct qwe d, *p = &d;
p->someData = 1;
p->ptr = p;
我明白这些指针指向同一个对象,根据语言规范中==
的定义,使用该运算符如下:
if (p == p->ptr)
printf("True\n");
这将在控制台窗口中打印True。虽然如此,这两个指针其实并不是同一个对象。问题在于是否有办法检查指针的等价性。我知道可以通过创建一个指向这些指针的指针,然后使用==
比较这些新指针来实现。
struct qwe** pToPtr_1 = &p;
struct qwe** pToPtr_2 = &(p->ptr);
if (pToPtr_1 == pToPtr_2)
printf("True\n");
这段代码不会在控制台上输出任何内容,但我想知道是否有一种直接比较指针地址的方法。我理解这可能有点无用(至少基于我当前对C编程语言和需求的理解),但我仍然想知道C(或C ++)是否存在这样的功能。
typedef struct qwe qwe;
。 - Iharob Al Asimi&p == &(p->ptr)
。无论是否涉及指针都并不重要。 - Joseph Mansfield