1

看不懂这个结果。。。

编码:

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成为一个空指针,我该如何解决这个问题?

4

2 回答 2

4

我认为你需要这个:

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

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

于 2010-04-07T00:21:12.340 回答
2

如果将指针转换为int,则将地址作为值。您需要像其他任何指针一样取消引用 void 指针。只有你不能直接取消引用void *,所以你必须首先将它转换为正确类型的指针,here int *。然后取消引用该指针,即*((int *)key)(额外的括号以阐明优先级)。

于 2010-04-07T00:28:51.840 回答