使用空指针作为函数参数问题
-
25-09-2019 - |
题
我不理解这一结果...
代码:
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
是一个空指针,我怎样才能解决这个问题?
解决方案
我想你需要这样的:
printf("[%d]\n", *(int*)key);
关键是一个空指针为int,所以你首先需要转换为int指针,则取消引用来获得原始INT。
其他提示
如果你投的指针int
,你得到的地址的作为值。您需要取消引用空指针像任何其他。只有你不能直接取消引用void *
,所以你必须先将其转换为正确的类型,这里int *
的指针。然后解引用该指针,即*((int *)key)
(额外括号澄清优先)。
不隶属于 StackOverflow