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

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. 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. Je confirme, il est obligatoire de spécifier la taille
      0
    2. et comment on fait si on ne connais pas la taille avant d'exécuter le programme ?
      0
  2. 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
    1. Contributeur
      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. 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. ne fonctionne pas
        0
      3. 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. Contributeur
        @jesusA 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. @fiddyDé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
    2. 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
      1. 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. Ce sujet a 10 ans x)
          0
        2. ha oui XD
          0