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

juni Messages postés 78 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 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.
A voir également:

5 réponses

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
Utilisateur anonyme
 
Je confirme, il est obligatoire de spécifier la taille
0
Welgriv
 
et comment on fait si on ne connais pas la taille avant d'exécuter le programme ?
0
juni Messages postés 78 Date d'inscription   Statut Membre Dernière intervention   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
tafiscobar Messages postés 1277 Date d'inscription   Statut Contributeur Dernière intervention   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
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
Welgriv
 
ne fonctionne pas
0
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > 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
jesus > fiddy Messages postés 11069 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
juni Messages postés 78 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RedSkidy Messages postés 196 Date d'inscription   Statut Membre Dernière intervention   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
Crazy Legs Messages postés 635 Date d'inscription   Statut Membre Dernière intervention   98
 
Ce sujet a 10 ans x)
0
RedSkidy Messages postés 196 Date d'inscription   Statut Membre Dernière intervention   6
 
ha oui XD
0