gpt4 book ai didi

C 空指针作为参数

转载 作者:行者123 更新时间:2023-11-30 14:22:43 24 4
gpt4 key购买 nike

我正在尝试通过地址传递一些内容。在本例中是一个 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 设置为某个内容,然后将其丢弃。这是不对的。

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,以便它可以设置其值。

关于C 空指针作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com