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 :

Passage d'une structure en argument de fonction


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Passage d'une structure en argument de fonction
    Bonjour. J'ai créer une structure dans mon .h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct chose {
        int x; // pour l'exemple
        int y;
    };
    typedef struct chose chose;
    Dans mon main, j'ai initialisé une variable de type chose, que j'ai passé a une fonction void de maniére a pouvoir modifier cette structure dans la fonction (je croit qu'on dit en "paramétre d'entrée/sortie"):

    MAIN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chose machose;
    int valeur;
     
    fonction1(&machose);
     
    valeur = machose.x;
    printf("%d", valeur);
    Et voici le code de "fonction1" et de "fonction2":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void fonction1(chose *p_machose) {
    (p_machose->x) = 5;
     fonction2(p_machose); // c'est déjà une adresse, je ne met pas de &, erreur?
    }
     
    void fonction2(chose p_machose) { // erreur?
     (p_machose->x)++;
    }
    C'est a ce moment que j'ai un problème, même si sur cet exemple c'est inutile, je veut passer ma structure a une autre fonction que j'appelle dans fonction 1, mais de façon a pouvoir toujours modifier ses valeurs a l'intérieur de fonction2. Or, je n'y parvient pas, j'ai donc du faire une erreur dans les paramètres de la 2éme fonction ? Ou alors, il s'agit d'une erreur dans la notation de l’accès au champ.

    Ça ne doit pas être très compliqué mais je n'y arrive pas... Sauriez vous résoudre mon problème ?

    Merci d'avance et bon dimanche !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si tu souhaites aussi pouvoir modifier ta structure dans fonction2, il te faut aussi passer un pointeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction2(chose *p_machose) {
    C'est bien comme ceci : fonction2(p_machose); qu'il faudra alors l'appeler.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DDaviDD Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void fonction1(chose *p_machose) {
    (p_machose->x) = 5;
     fonction2(p_machose); // c'est déjà une adresse, je ne met pas de &, erreur?
    }
    Bonjour

    Winjerome t'a répondu. Je vais juste rajouter que tu aurais dû le trouver tout seul puisque tu dis toi-même que p_machose est déjà une adresse (ce qui est tout à fait exact); donc tu aurais dû te rendre compte qu'une adresse ne peut se stocker que dans un pointeur...

    PS: pas besoin de parenthèses pour l'accès au membre (l'opérateur -> est un des plus prioritaires du C) => p_machose->x++...

    PS2: prends l'habitude de nommer tes types "t_xxx". Ca libèrera le token "xxx" pour un nom de variable (si besoin) et ça rendra la relecture plus aisée
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct /* Eventuellement donner un nom à la structure mais c'est facultatif */ s_chose {
        int x; // pour l'exemple
        int y;
    } t_chose;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Utiliser une structure comme argument d'une fonction
    Par guilermo dans le forum Débuter
    Réponses: 7
    Dernier message: 15/10/2009, 10h05
  2. Passage d'une structure en argument de classe
    Par so.generously dans le forum Langage
    Réponses: 3
    Dernier message: 27/05/2009, 10h07
  3. Passage d'une structure en fonction
    Par god_enel dans le forum C
    Réponses: 11
    Dernier message: 15/04/2007, 20h55
  4. Passage d'une structure dans une fonction
    Par god_enel dans le forum C
    Réponses: 7
    Dernier message: 01/02/2007, 15h33
  5. Passage d'une structure dans une fonction
    Par god_enel dans le forum C
    Réponses: 8
    Dernier message: 22/01/2007, 15h35

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