【发布时间】:2015-01-18 14:56:16
【问题描述】:
处理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。现在,一切正常,但这两个指针根本不是同一个对象。这里的问题是关于是否有办法检查 POINTER 是否相等。现在,我知道我可以创建一个指向这些指针的指针,然后将这些新指针与== 进行比较,如下所示
struct qwe** pToPtr_1 = &p;
struct qwe** pToPtr_2 = &(p->ptr);
if (pToPtr_1 == pToPtr_2)
printf("True\n");
,这不会产生到控制台的输出,但我想知道是否有办法直接比较指针地址。我确实知道这有点用处(至少基于我目前对 C 编程语言和需求的理解),但我仍然想知道 C(或 C++)中是否存在这样的功能。
【问题讨论】:
-
结构声明不是有效的 c 代码,除非你有以前的 typedef
typedef struct qwe qwe;。 -
but these two pointers are not the same objects at all应该是什么意思? -
我忘了说已经完成了。谢谢指正。
-
@iharob 他们确实指向同一个对象,但它们本身并不是同一个对象。
-
您想测试身份。最简单的方法是像您所做的那样,获取对象的地址。
&p == &(p->ptr)。是否处理指针真的无关紧要。