簡體   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