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 :

Pointeur structure : besoin d'éclaircissements [Débutant(e)]


Sujet :

C

  1. #1
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut Pointeur structure : besoin d'éclaircissements
    salut,
    j'ai deux questions l'utilisation des structures via des pointeurs.

    Je ne sais pas comment accèder aux variables contenues :
    * dans la structure coord du fait que c'est un tableau (voir la fonction afficheCoord)
    * dans ses sous structures (voir la fonction afficheDetail).

    header.h
    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
    #define TAILLE 100
     
    typedef struct Information Information;
    typedef struct Coordonnees Coordonnees;
     
    struct Information
    {
        char pays[TAILLE];
        char ville[TAILLE];
    };
     
    struct Coordonnees
    {
        long x;
        long y;
        Information details;
    };
     
    void afficheCoord(Coordonnees* coord);
    void afficheDetail(Coordonnees* coord);
    main.c
    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
    23
    24
    #include <stdio.h>
    #include <stdlib.h>
    #include "pointeur_structure_main.h"
     
    int main()
    {
        Coordonnees coord[2];
        //... initialisation de coord ...//
     
        afficheCoord(coord);
        afficheDetail(coord);
    	return 0;
    }
     
    void afficheCoord(Coordonnees* coord){
         printf("%dl", coord->x); // pas d'erreur mais valeur erronée
         printf("%dl", coord[0]->x); // erreur de compilation
         printf("%dl", (coord[0])->x);// erreur de compilation
    }
     
    void afficheDetail(Coordonnees* coord){
        printf("\n\nla ville de %s se trouve en %s\n",coord->details.ville, coord->details.pays);
        printf("\n\nla ville de %s se trouve en %s\n",coord->details->ville, coord->details->pays); // erreur de compilation
    }
    merci de vos éclairages

  2. #2
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    c'est un peu normal...

    Quand tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void afficheCoord(Coordonnees* coord){
         printf("%dl", coord->x); // pas d'erreur mais valeur erronée
         printf("%dl", coord[0]->x); // erreur de compilation
         printf("%dl", (coord[0])->x);// erreur de compilation
    }
    tu déclares un pointeur sur une STRUCTURE.

    Or il se trouve que ta structure en fait dans le programme appelant n'est pas une structure, mais un tableau de structures.

    Et pour un tableau l'adresse de coord[0] est égale à l' adresse de coord.


    D'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void afficheCoord(Coordonnees* coord){
         printf("%dl", coord[0].x);
    }
    Si ce n'avait pas été un tableau, mais juste une structure, tu aurais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void afficheCoord(Coordonnees* coord){
         printf("%dl", coord->x);
    }
    et donc même chose dans détail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void afficheDetail(Coordonnees* coord){
        printf("\n\nla ville de %s se trouve en %s\n",coord[0].details.ville, coord[0].details.pays);
    }


    [EDIT]

    Es-tu sûr du format d'affichage ??? c'est %ld et non pas %dl ....

    [/EDIT]

  3. #3
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    PS : je dirai que la conception est a revoir :d
    soit tu affiche une structure soit un tableau mais pas le premir élément d'un tableau c'est idiot

  4. #4
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    Ok merci pour vos réponses, c'est bête j'avais même pas essayé cette possibilité, mais c'est ok.
    Es-tu sûr du format d'affichage ??? c'est %ld et non pas %dl ....
    euh oui effectivement
    PS : je dirai que la conception est a revoir :d
    soit tu affiche une structure soit un tableau mais pas le premir élément d'un tableau c'est idiot
    J'avais simplifié mon code pour mettre en évidence mon souci. Sinon j'utilise des boucles "for" car je souhaite avoir plusieurs point.
    Merci encore pour vos réponses.

  5. #5
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    merci pour la précision ca me rassure un peu :d

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

Discussions similaires

  1. Pointeurs et classes : besoin d'éclaircissements
    Par Kaluza dans le forum Langage
    Réponses: 10
    Dernier message: 28/07/2010, 06h56
  2. [vb6] traitement d'images, besoin d'éclaircissements
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/08/2006, 10h20
  3. [JGoodies] besoin d'éclaircissements
    Par sozie9372 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 26/06/2006, 23h10
  4. Réponses: 12
    Dernier message: 03/01/2006, 17h23
  5. Pointeurs, Structures etc....
    Par kameha dans le forum C
    Réponses: 9
    Dernier message: 26/11/2005, 19h11

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