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 sur Tableaux de structures


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut pointeur sur Tableaux de structures
    Bonjour

    J'ai un probleme que voici.

    J'ai défini une structure de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Page{
    int precedent;
    int suivant;
    };
    ensuite j'ai déclaré un tableau de strucure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page livre1[Max_Chap][Max_Ligne];
    Mais du coup je ne sais plus comment déclarer un pointeur sur mon tableau de structure
    J'hésite entre deux formulations.

    -1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page *pt_livre1=&livre1[Max_Chap][Max_Ligne];

    -1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page *(*(*pt_livre1))=&livre1[Max_Chap][Max_Ligne];

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Linu6 Voir le message
    Bonjour

    J'ai un probleme que voici.

    J'ai défini une structure de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct Page{
    int precedent;
    int suivant;
    };
    ensuite j'ai déclaré un tableau de strucure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page livre1[Max_Chap][Max_Ligne];
    Non. T'as déclaré "livre1" un tableau de tableau de structures !!!

    Citation Envoyé par Linu6 Voir le message
    Mais du coup je ne sais plus comment déclarer un pointeur sur mon tableau de structure
    J'hésite entre deux formulations.

    -1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page *pt_livre1=&livre1[Max_Chap][Max_Ligne];

    -1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct Page *(*(*pt_livre1))=&livre1[Max_Chap][Max_Ligne];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Page **pt_livre1=livre1;
    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]

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Non. T'as déclaré "livre1" un tableau de tableau de structures !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Page **pt_livre1=livre1;
    Euh non. Erreur grave.

    Un tableau linéaire à 2 dimensions de type T n'a jamais eu le type T**. Tu confonds avec les tableaux de pointeurs qui servent à créer des tableaux 2D dynamiques (non linéaires).

    Rien à voir.
    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
     
    typedef struct
    {
       int nawak;
    }
    T;
     
    #define N 3
    #define M 4
     
    int main (void)
    {
       T a[N];
       T*pa = a;
       T b[N][M];
       T(*pb)[M] = b;
     
       return 0;
    }

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut
    Bonsoir
    tu a déclaré une matrice, un tableau deux dimension,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Page livre1[Max_Chap][Max_Ligne];
    est ce que tu veux maintenant déclarer un pointeur qui va pointer sur ta matrice? ou bien tu veux une declaration avec les pointeurs qui fera la même chose que ta matrice livre1. pour que je puisse t aider de préférence décrit bien ton problème ou écrit l énoncé de ton exercice.

  5. #5
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    Citation Envoyé par elghazi Voir le message
    Bonsoir
    tu a déclaré une matrice, un tableau deux dimension,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Page livre1[Max_Chap][Max_Ligne];
    est ce que tu veux maintenant déclarer un pointeur qui va pointer sur ta matrice? ou bien tu veux une declaration avec les pointeurs qui fera la même chose que ta matrice livre1. pour que je puisse t aider de préférence décrit bien ton problème ou écrit l énoncé de ton exercice.
    Je veux un pointeur sur ma matrice, pour pouvoir la passer en paramètre dans une fonction. (au lieu de passer une matrice en paramètre) .

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Linu6 Voir le message
    Je veux un pointeur sur ma matrice, pour pouvoir la passer en paramètre dans une fonction. (au lieu de passer une matrice en paramètre) .
    http://emmanuel-delahaye.developpez.....htm#param_tab

    Si tu n'y arrives pas, pose des questions.

  7. #7
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    http://emmanuel-delahaye.developpez.....htm#param_tab

    Si tu n'y arrives pas, pose des questions.
    Merci Emmanuel, c'est exactement ce qu'il me fallait.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Salut,

    Voici ta structure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct page{
        int precedent;
        int suivant;
    } page_t;
    Voici les declarations et affectations que tu veux faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    page_t page[10];
    page_t *ppage = page;
     
    page_t page2[10][20];
    page_t (*ppage2)[20] = page2;
     
    page_t page3[10][20][30];
    page_t (*ppage3)[20][30] = page3;
    Voila je pense (et j espere) avoir repondu a ton probleme ^^.

  9. #9
    Membre confirmé Avatar de Linu6
    Profil pro
    Inscrit en
    Août 2007
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 227
    Par défaut
    La question de la déclaration est maintenant résolu.

    ..mais dans le cas d'une matrice telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    page_t page2[10][20];
    page_t (*ppage2)[20] = page2;
    peut on établir les équivalences suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    adress: (ppage+i)[j]->past <=> &page[i][j].past
    valeur: *(ppage+i)[j][j]->next <=> page[i][j].next
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adress: ((ppage+i)[j]) <=> &page[i][j]
    valeur: (*(ppage+i)[j])='\0'; <=> page[i][j]='\0';
    ET pendant qu'on y est je voulais savoir comment je dois passer ce pointeur en paramètre dans la fonction. (aussi bien au niveau du prototype que de l'appel)

    merci.

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Linu6 Voir le message
    ..mais dans le cas d'une matrice telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    page_t page2[10][20];
    page_t (*ppage2)[20] = page2;
    peut on établir les équivalences suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adress: (ppage+i)[j]->past <=> &page[i][j].past
    valeur: *(ppage+i)[j][j]->next <=> page[i][j].next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adress: ((ppage+i)[j]) <=> &page[i][j]
    valeur: (*(ppage+i)[j])='\0'; <=> page[i][j]='\0';
    ET pendant qu'on y est je voulais savoir comment je dois passer ce pointeur en paramètre dans la fonction. (aussi bien au niveau du prototype que de l'appel)
    merci.
    Ces "équivalences" sont fausses. Par exemple :
    (ppage+i)[j] == *(ppage+i+j)== ppage[i+j] (soit au type près : page_t [20] pour l'un et page_t * pour l'autre) == &page[i+j][0]

    En fait, c'est plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ppage[i][j] == page[i][j]
    &ppage[i][j] == &page[i][j]
    Le passage en paramètre de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ... fonc( page_t (*p)[20])// ou encore]... fonc( page_t p[][20]) 
    {...
       p[i][j] =...
    }
    et l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... fonc(page); // ou au choix
    ...fonc(ppage);

  11. #11
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Moi je trouve que la structure ici c'est de la déco. Si on a :
    t est un tableau de 10 tableaux de 20 T. En mémoire, ça ressemble (non, c'est !) un tableau de 10 * 20 soit 200 T. On peut donc faire :
    Le cast ici est bien sûr nécessaire. On a ensuite l'équivalence t[i][j] <=> p[20*i + j]. Ou si tu veux &(t[i][j]) <=> p + 20*i + j

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

Discussions similaires

  1. pointeur sur tableaux
    Par xavierdestev dans le forum Débuter
    Réponses: 3
    Dernier message: 09/10/2013, 19h06
  2. JNA pointeur sur tableau de structure
    Par NyTR0 x dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 30/12/2009, 17h43
  3. Réponses: 3
    Dernier message: 26/11/2009, 13h33
  4. tableaux de pointeurs sur tableaux
    Par Ashin dans le forum C++
    Réponses: 3
    Dernier message: 11/02/2009, 20h31
  5. Pointeur sur tableau de structure
    Par Mercenary Developer dans le forum Débuter
    Réponses: 3
    Dernier message: 22/09/2008, 08h35

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