我想传递指向变量的指针。有时它会是一个整数,有时可能是一个字符。在下面的示例中,我将指针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.我得到的是什么,而不是我之前分配的整数,如何检索它而不是当前值?
答案 0 :(得分:6)
此:
(int) key
没有取消引用访问它指向的数据的指针,它将指针值(地址)本身重新解释为整数。
你需要:
printf("%d\n", *(int *) key);
答案 1 :(得分:3)
您需要对指向整数的指针进行类型转换。这意味着您只需获取地址即可。毕竟,指针只是一个地址。
您可能希望取消引用指针而不是转换它。 *(int*)key
会这样做。
答案 2 :(得分:3)
你正在打印指针,即。地址,而不是它指向的值。
使用它来打印值:
void CreateObject(void *key)
{
printf("%d\n", *(int*)key);
}