使用void指针作为函数参数的问题

时间:2010-04-07 00:18:30

标签: c function pointers argument-passing void-pointers

我无法理解这个结果......

代码:

void foo(void * key, size_t key_sz) {
    HashItem *item = malloc(sizeof(HashItem));

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

    ...

    item->key = malloc(key_sz);
    memcpy(item->key, key, key_sz);
}

void bar(int num) {
    foo(&num, sizeof(int));
}

我打这个电话:bar(900011009);

但是printf()输出是:

[-1074593956]

我真的需要key成为无效指针,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:4)

我认为你需要这个:

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

键是指向int的void指针,因此首先需要强制转换为int指针,然后取消引用以获取原始int。

答案 1 :(得分:2)

如果您将指针强制转换为int,则会将地址作为值。你需要像其他指针一样取消引用void指针。只有您无法直接取消引用void *,因此必须先将其转换为正确类型的指针,此处为int *。然后取消引用该指针,即*((int *)key)(用于澄清优先级的额外括号)。