2012-11-27 2 views
0

주소를 통해 전달하려고합니다. 이 경우에는 char 배열이지만 아무 것도 될 수 있습니다.C void 포인터를 인수로 사용합니다.

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 기능 내부의 '가치',하지만 때 함수가 나쁜 호출 된 후 나는 주에 체크인의 값을 확인

. 그것은 올바른 메모리 주소로 설정되지 않는 것 같습니다. 왜 이런거야?

+0

'val2'를'rickyHashTableGet'에 전달하기 전에 어떤 종류의 값으로 설정해야합니다! 또한,'rickyHashTableGet'은'value'를 무언가로 설정 한 다음 버립니다. 그것을 돌려주고 싶습니까? 또는 값으로 전달하는 대신 포인터를 전달하려고 했습니까? –

답변

0

get 루틴에서는 void ** 매개 변수로 가져오고 * value = table-> entries [0] .value; 그런 다음 호출은 & val2를 사용합니다.

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

이 전달 된 value을 무시합니다. value을 설정하고 버립니다. 이건 옳지 않아.

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

이 아무것도에 val2를 설정하고, 따라서 rickyHashTableGet에 말도 안되는 값을 전달하지 않습니다. 그건 옳지 않아.

당신이 원하는 :

void *에 대한 포인터를 받아 뭔가를 가리하게
int rickyHashTableGet(rickyHashTable *table, char *key, void **value) 
{ 
    *value = table->entries[0].value; 
} 

.

그리고 :

주소 rickyHashTableGet-val2을 통과, 그래서 그것의 값을 설정할 수 있습니다
void *val2; 
rickyHashTableGet(&symbolTable, "ok", &val2); 

.

관련 문제