0

我试图通过地址传递一些东西。在这种情况下,一个 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 函数中检查“值”的值时,它是正确的,但是当我在调用函数后签入 main 时,它就不好了。它似乎没有设置为正确的内存地址。为什么是这样?

4

2 回答 2

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

这忽略了value通过的。设置value为某物,然后将其丢弃。这不可能。

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

这没有设置val2任何东西,因此将一个无意义的值传递给rickyHashTableGet. 这不可能。

你要:

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

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

和:

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

传递to的地址,所以它可以设置它的值。val2rickyHashTableGet

于 2012-11-27T03:22:45.767 回答
0

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

于 2012-11-27T03:22:33.907 回答