【问题标题】:Problem using void pointer as a function argument使用 void 指针作为函数参数的问题
【发布时间】:2011-02-05 01:29:59
【问题描述】:

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

代码:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,我尝试了(int*)*key,但没有成功,我从未想过*(int*)key
    【解决方案2】:

    我认为你需要这个:

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

    关键是一个指向int的void指针,所以你首先需要转换成一个int指针,然后解引用得到原来的int。

    【讨论】:

    • 是的,我尝试了(int*)*key,但没有成功,我从来没有想过*(int*)key
    猜你喜欢
    • 2016-05-03
    • 2016-12-13
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2020-12-31
    相关资源
    最近更新 更多