2012-12-25 150 views
1

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

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

+1

而且,出于好奇,你怎么打算区分元素的传入的大小?另一个参数? – sidyll

回答

6

此:

(int) key 

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

您需要:

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

你类型转换的指针为整数。这意味着你只需获得地址。毕竟,指针只是一个地址。

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

3

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

使用该打印值:

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