C++ tableau 2D en arg d'une fonction

juni Messages postés 79 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour

Je cherche à passer un tableau à deux dimensions en argument à une fonction.
J'ai essayé de le faire par pointeur de la même manière que pour un tableau à une dimension.

//PROGRAMME
#include <iostream.h>
#include <stdlib.h>

void test(int pTab)
{
pTab[1][1]=0;
}

int main ()
{
int tab[3][4]; // je n'ai besoin que de tableaux à dimensions égales
int * p;
p = &tab[0][0];
fonction(p);
cout << tab[1][1];
}

A la compilation, j'ai une erreur "invalid types 'int[int]' for array subscript" pour la ligne 7 (pTab[1][1]=0; dans test)
Si je mets une fonction vide { } pour test, je n'ai pas cette erreur. Donc le compilateur comprend le pointeur vers le tableau 2D, mais l'accesseur que j'utilise pour atteindre le contenu du tableau n'est pas reconnu.

Comment faire pour pouvoir manipuler le contenu de mon tableau ?
Merci

On n'est pas le meilleur quand on le croit mais quand on le
sait.

5 réponses

  1. Monkey
     
    Salut, pour passer un tableau à deux dimension comme paramètre, il faut spécifier la taille de la seconde dimension:

    void  affiche(float tab[][2]){
          ...
          cout<<tab[0][0];
          ...
    }
    
    
    int main(){
    
    float totalAnnee[20][2];
    
    ...
    affiche(totalAnnee);
    
    }
    
    
    
    


    Voilà
    2
    1. Utilisateur anonyme
       
      Je confirme, il est obligatoire de spécifier la taille
      0
    2. Welgriv
       
      et comment on fait si on ne connais pas la taille avant d'exécuter le programme ?
      0
  2. juni Messages postés 79 Statut Membre 22
     
    petite précision : j'ai testé la même chose avec un tableau dynamique au lieu du tableau statique, ça ne marche pas plus...

    On n'est pas le meilleur quand on le croit mais quand on le
    sait.
    2
  3. tafiscobar Messages postés 1281 Statut Contributeur 177
     
    salut, )pour passer un tableau a 2 dimensions, t'as 2 choix, soit par valeur, soit par pointeur (ce qui est meilleur, puisq tu évites une recopie et d'ailleurs c'est ce qui est utilisé lorsq l'on veut modifier le tableau), donc voila:
    
    cas 1
    void
    test (int **tab, int len_in, int len_out) {
    for  (int i = 0; i < len_out; i++)
         for (int j = 0; j < len_in; j++)
               cout<<tab[i][j];
    }
    
    int
    main () {
    int **tab;
    //initialisation
    test (tab);
    }
    
    
    cas 2
    
    void
    test (int tab[][], int len_in, int len_out) {
    for  (int i = 0; i < len_out; i++)
         for (int j = 0; j < len_in; j++)
               cout<<tab[i][j];
    }
    
    int
    main () {
    int tab[][];
    //initialisation
    test (tab);
    }
    
    


    tafiscobar "lou waye def bopame"
    la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
    2
    1. apophis
       
      ca marche pas ton truc en plus tu met meme pas les bornes dans l'appel de ta fonction
      la preuve que ta pas testé ton code
      0
    2. Welgriv
       
      ne fonctionne pas
      0
    3. jesus
       
      en fait ca marche comme ca

      cout<<tab[i][j]; dans l'exemple 1 cas 1

      remplace le par
      cout+=tab[len_in*i+j];


      puis fait un printf de cout si tu veux l'afficher

      printf("\n%d",cout);

      et ca va marcher
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > jesus
       
      A côté de la plaque...
      cout << "..."; est tout à fait correct en C++. Rien à voir avec ce que tu proposes...
      Le printf() c'est plutôt du C...
      0
    5. jesus > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Désoler c'est en C mais c'est fonctionnel voici le code exact ce que vous désirez c passer au travers un tableau et l'afficher c'est bien ca

      la fonction

      void getTable(int* leTableau,int n,int m)
      {
      // tableau n*m

      int j;


      for(j=0;j<n*m;j++)
      {
      printf("%d"" ",leTableau[j]);
      }

      }

      // le code main

      int test[3][3] ={{11,2,3},{5,4,7},{8,5,6}}; // le tableau en question

      getTable(test[0],3,3);
      0
  4. juni Messages postés 79 Statut Membre 22
     
    Quelqu'un peut-il prendre le temps de me répondre ???

    On n'est pas le meilleur quand on le croit mais quand on le
    sait.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RedSkidy Messages postés 213 Statut Membre 6
     
    pourquoi tu est agressif ? sa donne pas du tout envie de t'aider et est-ce que tu a essayé de passer un pointeur a ta fonction tout seul au moins
    0
    1. Crazy Legs Messages postés 777 Date d'inscription   Statut Membre Dernière intervention   98
       
      Ce sujet a 10 ans x)
      0
    2. RedSkidy Messages postés 213 Statut Membre 6
       
      ha oui XD
      0