2012-04-08 5 views
14

Mam problem z przekazaniem wskaźnika do struct do funkcji. Mój kod jest zasadniczo taki, jak pokazano poniżej. Po wywołaniu modify_item w głównej funkcji stuff == NULL. Chcę, aby materiał był wskaźnikiem do elementu struct z elementem równym 5. Co robię źle?Przekazywanie wskaźnika struktury do funkcji c

void modify_item(struct item *s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(stuff); //After this call, stuff == NULL, why? 
} 

Odpowiedz

22

Ponieważ są przechodzącą wskaźnik wartością. Funkcja działa na kopii wskaźnika i nigdy nie modyfikuje oryginału.

Należy przekazać wskaźnik do wskaźnika (np. struct item **) lub zamiast tego, aby funkcja zwróciła wskaźnik.

17
void modify_item(struct item **s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    *s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(&stuff); 

lub

struct item *modify_item(void){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    return retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    stuff = modify_item(); 
}