1

我想传递一个指向变量的指针。有时它是一个整数,有时可能是一个字符。在下面的示例中,我将指针传递pCreateObject但是当我尝试检索指针指向的变量的值时,我得到了一个尴尬的结果:

int i =0;
int *p = malloc(sizeof(int));
*p = i;

ObjectP object = CreateObject(p);

假设我想将其转换回 int 并显示它:

void CreateObject(void *key)
{
   printf("%d\n", (int)key);
}

我得到:160637064 而不是 0。我得到的是什么而不是我之前分配的整数以及如何检索它而不是当前值?

4

3 回答 3

6

这:

(int) key

不是取消引用指针来访问它指向的数据,而是将指针值(地址)本身重新解释为整数。

你需要:

printf("%d\n", *(int *) key);
于 2012-12-25T13:35:31.580 回答
3

您正在对一个指向整数的指针进行类型转换。这意味着您只需获取地址。毕竟,指针只是一个地址。

您可能想要取消引用指针而不是强制转换它。*(int*)key会这样做。

于 2012-12-25T13:35:53.823 回答
3

您正在打印指针,即。地址,而不是它指向的值。

使用它来打印值:

void CreateObject(void *key)
{
   printf("%d\n", *(int*)key);
}
于 2012-12-25T13:36:24.050 回答