IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Pointeurs sur structures - Difficultés de compréhension


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut Pointeurs sur structures - Difficultés de compréhension
    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.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    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.

  3. #3
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 313
    Par défaut
    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.

Discussions similaires

  1. pointeur sur structures
    Par Seimaya dans le forum Débuter
    Réponses: 33
    Dernier message: 26/08/2007, 18h13
  2. Réponses: 6
    Dernier message: 07/07/2007, 18h12
  3. pointeur sur structure
    Par julien.63 dans le forum C
    Réponses: 7
    Dernier message: 04/06/2007, 17h50
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 13h17
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo