Tableau 2 dimension en fonction

Signaler
Messages postés
9
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
5 avril 2008
-
Messages postés
59
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2010
-
Bonjour, j'aimerai pas un tableau à 2 dimension en paramètre sans pointeurs. Quand je le fais (comme suit), il m'affiche "error:array type has incomplete element type". Voila un extrait de mon code.

Merci d'avance

void tabu(int tab[][]);

main()
{
int tab[4][2];
...
//j'appelle la fonction
tabu(&tab[0][0]);
...
}

void tabu(int tab[][]) // il me met l'erreur ici
{
...
}

3 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Essais
void tabu(int tab[4][2])

Le problème c'est que tu limiteras ta fonction à traiter uniquement des tableaux de cette taille.
Pour traiter des tableaux de taille différentes, il faut passer par les pointeurs.

C++ (@++)<!--
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut
Pour passer un tableau a  dimension sans passer par la notation des pointeurs :
soit un tableau  int TAB[a][b];
et la fonction const int function qui doit prendre TAB en parametre; tu declares alors ( la signature de la fonction comme suit):

const int function(int TAB[][b]);

il faut donc que tu precises la 2eme dimension.

comme dit SAKingdom , ca te limite dans tes variables que tu pourrais passer en argument (a cause du buffer-overflow).
si tu utilises les pointeurs il y 2 autres notations possibles

const int function(int* TAB[]);

et

const int function(int** TAB);

je suis heureux de faire partie d'une grande famille ...!
Messages postés
59
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2010
8
J'ai eu le meme probleme que toi moi aussi j'arrive pas a passer un tableau a 2 dimensions mais j'ai annalysé l'organisation d'un tableau a 2 dimensions en memoire et j'ai trouver ça comme soluce (tu comprendra avec ce ptit code source) :

void rec_tab( bool* tableau, int& taille_1, int& taille_2 ) // Fonction qui permetra de lire et modifier le tableau
{
      for ( int i_t1 = 0; i_t1<taille_1; i_t1++ )
      {
            for ( int i_t2 = 0; i_t2 < taille_2; i_t2++ )
                  tab[(int unsigned)((i_t1*taille_2)+i_t1))] = true;
      }
      /*                                             EXPLICATIONS
      Si par exemple on a un tableau qui est declarer de cette façon :
           bool tableau [ 2 ] [ 2 ];
      Cela revient a faire :
           bool tableau [ 4 ]; // Parce que 2 * 2  = 4
      donc pour acceder par exemple a l'index :
            tableau [ 1 ][ 0 ];
      suffit de faire :
            tableau [ 2 ];
      et pour :
            tableau [ 1 ][ 1 ];
      faut faire :
           tableau [ 2 + 1 ];
}

int main ()
{
    int taille_dimension1, taille_dimension2;

   taille_dimension1 = 4;
   taille_dimension2 = 4;

     bool tableau [taille_dimension1][taille_dimension2] = {false}; // Declaration du tableau bool ( Rappelez vous qu'un bool est codé sur 1 octet )
 
     rec_tab ( tableau[0], taille_dimension1, taille_dimension2 );    
 
     return 0;
}