【发布时间】:2014-11-03 14:26:42
【问题描述】:
我需要比较 C 中两个 void 指针的值。在下面的代码中,我在控制台打印出它们是不同的。好像比较的是这两个void指针所包含的地址。
如何使代码比较void 指针的值(即:1 == 1)并打印"same"?
int main(void)
{
int i = 1;
int j = 1;
void *pi = &i;
void *pj = &j;
if (pi == pj) {
printf("same.\n");
} else {
printf("different.\n");
}
return 0;
}
【问题讨论】:
-
你没有 void 指针然后你有 int 指针然后 *pi == *pj。但是,虽然它是一个 void 指针,但它只是一个指针,然后尝试比较指向的内容是非常糟糕的做法
-
使用
memcmp例如if(memcmp(pi, pj, sizeof(int))==0){ -
更具体地说,我正在尝试实现一个链表,其中节点存储通用 void 值。在 delete 方法中,我想传递一个 void 项,该项与要删除的链表中的值进行比较。但是当我尝试比较两个 void 指针时,即使它们指向的值相同,比较也会返回 false。所以,我想知道是否有办法比较指针的值?
-
@jl987:如果不明确告诉编译器如何比较它们,就不可能比较
void *指针指向的值。编译器不知道它。只有你知道如何做到这一点。在最简单的情况下,您必须通过在强制转换中指定确切类型来告诉编译器这些值具有哪些类型。或者,您可以为delete方法提供通用比较函数(您将提供),就像使用标准bsearch或qsort函数一样。
标签: c pointers void-pointers