c - 将指针传递给参数为void * variable的函数

时间:2012-12-25 13:33:46

标签: c

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

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.我得到的是什么,而不是我之前分配的整数,如何检索它而不是当前值?

3 个答案:

答案 0 :(得分:6)

此:

(int) key

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

你需要:

printf("%d\n", *(int *) key);

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

使用它来打印值:

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