Bonjour à tous,
je voulais savoir pourquoi on utilise préférentiellement des fonctions qui retournent et utilisent des pointeurs sur structure plutôt que des structures elles-mêmes.
Merci d'avance pour vos réponses.
Bonjour à tous,
je voulais savoir pourquoi on utilise préférentiellement des fonctions qui retournent et utilisent des pointeurs sur structure plutôt que des structures elles-mêmes.
Merci d'avance pour vos réponses.
Bonjour,
Effectivement, en soi, il est possible de renvoyer directement une structure remplie, tant que celle-ci conserve une taille raisonnable (renvoyer un objet atteignant ou dépassant le kilo-octet dans la pile est une mauvaise pratique).
Mais dans le cas présent, il s'agit d'une pratique assez répandue dans ce genre d'exercice : la fonction crée un nouvel objet en allouant elle-même l'espace nécessaire, avec malloc. C'est donc l'adresse de cet espace qu'il faut renvoyer, ne serait-ce que pour le libérer a posteriori. Mais surtout, il s'agit d'un arbre. Chaque structure forme donc un nœud et ces nœuds se référencent entre eux. Les champs de chaque structure sont donc des pointeurs vers d'autres instances du même type de structure et pour pouvoir les remplir, il faut déjà en avoir connaissance.
Version simplifiée.
Lorsque tu travailles sur un pointeur, tu travailles directement dans les cases mémoire de ta variable/structure. Lorsque tu donnes un pointeur à une fonction, tu lui envoies la référence de la variable pointée. Alors que dans le cas contraire, ta fonction travaille sur une copie. Qui dit copie, dit plus de mémoire utilisée. (même si cette mémoire est en quelque sorte "libérée" à la sortie de ta fonction)
Imagine une structure contenant des tableaux énormes (des milliers d'octets)...
Tu as besoin d'une fonction pour le modifier 1 octet. Il serait dommage d'envoyer à cette fonction une copie de ton tableau, pour qu'elle modifie la copie, et le renvoie intégralement.
Autant envoyer l'adresse du tableau à ta fonction. Celle-ci modifiera directement le tableau.
On a ainsi gagné du temps, de la mémoire.
Partager