Tableau à 2 dimensions en paramètre

Signaler
Messages postés
61
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
29 juin 2005
-
Messages postés
61
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
29 juin 2005
-
Bonjours,



Voila mon problème : je n'arrive pas à passer une tableau a 2
dimensions en paramètre. Est ce que quelqu'un sais comment faire ? Merci



void fonctions(tableau)

{

...

tableau[1][3]=2

...

}

int main()

{

int tableau[6][7];

fonction(tableau);

...

return 0;

}

4 réponses

Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Petit exemple simple ...

#include <stdio.h>

#define ITEM_SIZE (25)
void FillTab( int nTab[][ITEM_SIZE], unsigned uNbItem )
{


unsigned i, a;
unsigned counter = (uNbItem * ITEM_SIZE);


for ( i = 0u; i < uNbItem; ++i )
{
for ( a = 0u; a < ITEM_SIZE; ++a )
{
nTab[i][a] = --counter;
}
}


}


void PrintTab( int nTab[][ITEM_SIZE], unsigned uNbItem )
{


unsigned i, a;
unsigned counter = 0u;


for ( i = 0u; i < uNbItem; ++i )
{
for ( a = 0u; a < ITEM_SIZE; ++a, ++counter )
{
printf("item %u => %u\n", counter, nTab[i][a] );
}
}


}

int main()
{

int tableau[15][ITEM_SIZE];


FillTab( tableau, 15 );
PrintTab( tableau, 15 );

return 0;

}

~(.:: NitRic ::.)~
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

Tes prototypes ne sont pas disons "conforme"
Au lieu de
void FillTab( int nTab[][ITEM_SIZE], unsigned uNbItem )
tu devrais mettre
void FillTab( int** nTab, unsigned uNbItem )
Ca correspond exactement à la meme chose car le C++ ne passe pas de
tableau comme arguments il passe juste des pointeurs
a+
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
NitRic : ta notation ne permet de passer que des tableaux avec la même taille

asmanur : ta notation ne permet pas de passer des tableaux statiques (uniquement des tableaux dynamiques.

=> Conclusion : les 2 notations ne sont absolument pas les même (que ce soit en C ou C++), et dépendent de l'utilisation mais sont toutes les 2 "conformes".

* une déclaration du genre :
int tab[32][16];
=> tab est un pointeur simple sur une zone mémoire contenant 32*16 entiers que l'on dit être un tableaux à 2 dimensions. Pour le passer en paramètres une seule des dimensions peut être inconnue (la première), les autres doivent être données au compilo. La première doit être passé en param sup pour connaître la taille.
void PrintTab( int nTab[][16], int dim1 )
PrintTab(tab, 32);

* une décalrartion du genre:
int** tab;
tab = new int*[32];
for(int i = 0; i < 32; i++)
tab[i] = new int[16];

=> tab est un tableau dynamique à 2 dimensions (en fait un tableau de tableaux d'o^le double pointeur). les sous-tableaux ne se suivent pas forcément en mémoire (contrairement aux tableaux statiques). Il faut donc passer en param au compilo les 2 dimensions.
void PrintTab( int** nTab, int dim1, int dim2)
PrintTab(tab, 32, 16);
Messages postés
61
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
29 juin 2005

En fait, la solution qui me va le mieu est un tableau dynamique.

Merci pour vos réponses et d'avoir été si rapide!