我无法理解这个结果......
代码:
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
成为无效指针,我该如何解决这个问题呢?
答案 0 :(得分:4)
我认为你需要这个:
printf("[%d]\n", *(int*)key);
键是指向int的void指针,因此首先需要强制转换为int指针,然后取消引用以获取原始int。
答案 1 :(得分:2)
如果您将指针强制转换为int
,则会将地址作为值。你需要像其他指针一样取消引用void指针。只有您无法直接取消引用void *
,因此必须先将其转换为正确类型的指针,此处为int *
。然后取消引用该指针,即*((int *)key)
(用于澄清优先级的额外括号)。