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 :

parcourir un tableau de pointeurs


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut parcourir un tableau de pointeurs
    Bonjour à tous,

    comment fait-on pour passer à une fonction et parcourir mon tableau de pointeurs TAB de tableau à deux dimensions:
    J'ai deux tableaux à deux dimensions: Tab1 et Tab2
    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
    25
    26
    27
     
    int Tab1 [8][4] ={ {1,1,2,2},
                       {2,0,1,3},
                       {3,1,2,3},
                       {3,0,3,4},
                       {4,1,0,5},
                       {5,1,3,6},
    		   {6,1,0,7} };
    /**************************************/
    int Tab2 [8][4] ={ {2,0,1,3},
                       {2,0,7,3},
                       {3,1,2,3},
                       {3,0,3,4},
                       {3,1,2,3},
                       {5,1,3,6},
                       {6,1,0,7} };
    /**************************************/
     
    int (*p1)[4]; // je crée un pointeur sur Tab1
    p1=Tab1;      // affectation 
    int(* p2)[4];
    p2=Tab2;
     
    int (*TAB[2])[4]; // je crée le tableau de pointeur
    TAB[0]=p1;	// pointeur de Tab1 sur le premier élément de mon tableau 
     
    TAB[1]=p2; // pointeur de Tab2 sur le premier élément de mon tableau
    merci

  2. #2
    Membre régulier Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    void f( int (*la_tab[])[4] );
    void g( int (**la_tab)[4] );

    f ( TAB );
    g( TAB );

  3. #3
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par cynique Voir le message
    void f( int (*la_tab[])[4] );
    void g( int (**la_tab)[4] );

    f ( TAB );
    g( TAB );
    houlà, pas sûr que ça marche... et très sale.

    On peut faire simplement comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void f( int** montableau, size_t taille1, size_t taille2)
    {
    }
    par contre, il est sans doute plus pertinent d'utiliser une des structures de donnée fournie par la stl ou bien boost::array.

    sinon,
    Citation Envoyé par nadia75 Voir le message
    ****************************/

    int (*p1)[4]; // je crée un pointeur sur Tab1
    p1=Tab1; // affectation
    int(* p2)[4];
    p2=Tab2;
    pourquoi ne pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	int **p1; // je crée un pointeur sur Tab1
    	p1=Tab1;      // affectation 
    	int**p2;
    	p2=Tab2;
    C'est aussi fonctionel et bien plus propre... par contre, attention, ça ne recopie pas le tableau, juste le pointeur !

    bonne chance
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Si le but est de mettre ces pointeurs dans un tableau, c'est peut-être encore plus simple de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int (*Tab[2])[4];
    Tab[0]=Tab1;
    Tab[1]=Tab2;

    PS: Tes tableaux son composé de huit tableaux de quatre éléments mais initialisé avec sept tableau de quatre élément, je ne sais pas si c'est volontaire ?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Pour répondre à ta question comment passer ce tableau à une fonction :
    C'est pas évident à expliquer alors rien de mieux qu'un exemple :
    La fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void ftab(int (**Tab)[4], int nElem, int nbTab)
    {
      for(int z=0; z<nbTab; z++)
      {
        for(int x=0; x<nElem; x++)
          {
            for(int y=0; y<4; y++) std::cout << Tab[z][x][y] << " ";
            std::cout << std::endl;
          }
      }
    }
    L'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int (*Tab[2])[4];
    Tab[0]=Tab1;
    Tab[1]=Tab2;
     
    ftab(Tab, 8, 2);

  6. #6
    Membre actif
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Points : 213
    Points
    213
    Par défaut
    Pour se simplifier la vie il existe les std::vector. C'est très bien de les utiliser quand on débute.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut Tableaux de pointeurs
    Pourquoi ne pas faire qu'un seul tableau puisque tu connais toutes les tailles ?
    un float tab[16] peut très bien remplacer un float tab[4][4] (matrices notamment).

    C'est toujours la misère les tableaux a deux dimensions je trouve .

  8. #8
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Il faut aussi savoir qu'un tableau à deux dimensions est représenté en mémoire comme un tableau à une dimension. Il est également possible d'accéder aux éléments du tableau via un pointeur simple.

    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
     
    const int SIZE_Y = 8;
    const int SIZE_X = 4;
    int tab[SIZE_Y][SIZE_X];
     
    int *ptr = &tab[0] + SIZE_Y*y + x; // ptr est un pointeur vers tab[y][x]
    int *ptr2 = &tab[0] + SIZE_Y*y; // ptr2 est un pointeur vers tab[y][0]
    ++ptr2; // ptr2 pointe vers tab[y][1]
     
    void f( int* t )
    {
       *t = 2;
    }
     
    f( ptr );
     
    std::cout << t[y][x] << std::endl; // affichera 2
    C'est du C

Discussions similaires

  1. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19
  2. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  3. Comment parcourir un tableau
    Par petitsims dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/01/2005, 14h33
  4. parcourir un tableau aléatoirement
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/12/2004, 13h44
  5. [langage] Parcourir un tableau
    Par Jibees dans le forum Langage
    Réponses: 13
    Dernier message: 22/04/2003, 14h18

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