[英]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.