繁体   English   中英

C Void指针作为参数

[英]C Void pointer as an argument

我试图通过地址传递一些东西。 在这种情况下是一个char数组,但它可以是任何东西。

void rickyHashTableAdd(rickyHashTable *table, char *key, void *value)
{
    rickyHashTableEntry entry;
    entry.key = strdup(key);    
    entry.value = value;
    table->entries[0] = entry;
}

int rickyHashTableGet(rickyHashTable *table, char *key, void *value)
{
    value = table->entries[0].value;
}

int main (void) 
{       
    void *val;
    val = "what up";
    rickyHashTableAdd(&symbolTable, "ok", val);
    void *val2;
    rickyHashTableGet(&symbolTable, "ok", val2);
    printf("result: %s\n", val2);   

}

当我在rickyHashTableGet函数中检查'value'的值时它是正确的,但是当我在函数被调用后在main中签入它是坏的。 它似乎没有设置到正确的内存地址。 为什么是这样?

int rickyHashTableGet(rickyHashTable *table, char *key, void *value)
{
    value = table->entries[0].value;
}

这会忽略传递的value value设置为某个value然后将其抛弃。 这不可能是对的。

void *val2;
rickyHashTableGet(&symbolTable, "ok", val2);

这不会将val2设置为任何内容,因此将无意义的值传递给rickyHashTableGet 这不可能是正确的。

你要:

int rickyHashTableGet(rickyHashTable *table, char *key, void **value)
{
    *value = table->entries[0].value;
}

这需要一个指向void *的指针,并指向某个东西。

和:

void *val2;
rickyHashTableGet(&symbolTable, "ok", &val2);

这将val2地址传递给rickyHashTableGet ,因此它可以设置其值。

在你的get例程中,它应该是void ** get作为参数和* value = table-> entries [0] .value; 然后调用将使用&val2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM