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 dans une fonction


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 78
    Points : 37
    Points
    37
    Par défaut Passage d'une structure dans une fonction
    Bonjour,
    J'ai effectué un programme pour tester l'envoi d'une structure dans une fonction à l'aide d'un pointeur.
    J'ai des erreurs que je ne comprends pas, je vous copie donc mon code pour savoir si j'ai des erreurs de syntaxe ou de logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <conio.h>
    void afficheCoordonnees(Coordonnees *point); // prototype de la fonction
    main()
    {
          struct Coordonnees // Déclaration de la structure
        {
        int x; // Abscisse
        int y; // Ordonnée
        };
     
        struct Coordonnees *point = {5, 6}; // Création de la variable de type structure avec un pointeur
        afficheCoordonnees(*point); // Appel de la fonction
    }
     
    void afficheCoordonnees(struct Coordonnees *point) // Fonction qui affiche les valeurs de x et y
    {
         printf("La valeur x vaut %d\n", *point.x);
         printf("La valeur y vaut %d\n", *point.y);
    }
    Merci de votre aide

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tu mélanges plusieurs choses :

    1) tu déclares la structure de type Coordonnées par 1 pointeur... C'est pas un pointeur sur une structure que tu veux, mais une structure...

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        struct Coordonnees point = {5, 6};
    Ensuite tu passes pas le pointeur sur cette structure à la routine, mais ce qui est CONTENU dans l'adresse, donc la structure (l'inverse de ce que tu veux)..

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    afficheCoordonnees(&point);
    Et enfin pout atteindre les membres de la structure, tu refais la même erreur, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        printf("La valeur x vaut %d\n", point->x);
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    J'ai réalisé les modifications que tu m'a suggéré mais le compilateur détecte des erreurs dans le prototype de ma fonction que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficheCoordonnees(Coordonnees point); // prototype de la fonction
    y vois tu une erreur?

  4. #4
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Faut également déclarer ta structure en dehors de toutes fonctions pour une question de visibilité.
    Un "typedef" de la structure serait également le bienvenu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <stdio.h>
     
    typedef struct  // Définition de la structure
    {
        int x; // Abscisse
        int y; // Ordonnée
    } Coordonnees;
     
    void afficheCoordonnees(Coordonnees *point) // Fonction qui affiche les valeurs de x et y
    {
        printf("La valeur x vaut %d\n", point->x);
        printf("La valeur y vaut %d\n", point->y);
    }
     
    int main(void)
    {
        Coordonnees point = { 5, 6 } ; // Création de la variable de type structure avec un pointeur
     
        afficheCoordonnees(&point); // Appel de la fonction
     
        return 0;
    }
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    Cette manière de le faire fonctionne, je te remercie.
    Toutefois, est-il possible d'effectuer ce même traitement sans déclarer la structure en globale?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    coordonnées *point ........

    Lis un peu .. C'est très bien expliqué (quoique un peu confus j'admets pour la première fois)..

    Un pointeur défini l'ADRESSE de quelque chose... Donc n'est en fait qu'un entier...

    coord *toto défini une variable qui va contenir une adresse, c'est tout. coord toto définit une varaible qui est une structure de type coord....

    Donc si elle est définie de type coord toto, on atteindra ses membres par . :
    toto.x

    Si elle est définie de type coord *toto, on atteindra ses membres par -> :
    toto->x

    Quand on écrit routine ( strcut *toto )

    on dit qu'on va passer une adresse (un entier) à la fonction.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par god_enel
    Cette manière de le faire fonctionne, je te remercie.
    Toutefois, est-il possible d'effectuer ce même traitement sans déclarer la structure en globale?
    Attention, tu confonds définition et déclaration.
    Une p'tite révision de ton cours sur le langage C s'impose.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 78
    Points : 37
    Points
    37
    Par défaut
    AH je comprend mieux.
    Merci de votre aide tout le monde!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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