J'ai un problème avec le passage d'un pointeur vers une structure vers une fonction. Mon code est essentiellement ce qui est montré ci-dessous. Après avoir appelé modify_item dans la fonction principale, stuff == NULL. Je veux que le truc soit un pointeur vers une structure d'élément avec un élément égal à 5. Qu'est-ce que je fais mal?
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?
}
Parce que vous passez le pointeur par valeur. La fonction fonctionne sur une copie du pointeur et ne modifie jamais l'original.
Soit passez un pointeur sur le pointeur (c'est-à-dire un struct item **
), ou plutôt que la fonction renvoie le pointeur.
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);
ou
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();
}
Vous pouvez également faire référence au pointeur:
void modify_item(struct item* &s){
struct item *retVal = (struct item*)malloc(sizeof(struct item));
retVal->element = 5;
s = retVal;
}
int main(){
struct item *stuff = NULL;
modify_item(stuff); //After this call, stuff == NULL, why?
cout<<stuff->element;
return 0;
}