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

Fermé
juni Messages postés 78 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 16 février 2006 - 18 mai 2004 à 15:18
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 19 déc. 2014 à 23:00
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

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
13 août 2012 à 09:37
Je confirme, il est obligatoire de spécifier la taille
0
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 samedi 3 janvier 2004 Statut Membre Dernière intervention 16 février 2006 22
18 mai 2004 à 15: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 jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
18 mai 2004 à 20:00
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
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
ne fonctionne pas
0
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > jesus
19 déc. 2014 à 20:01
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
19 déc. 2014 à 21:40
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 samedi 3 janvier 2004 Statut Membre Dernière intervention 16 février 2006 22
18 mai 2004 à 18:59
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 jeudi 30 janvier 2014 Statut Membre Dernière intervention 22 octobre 2015 6
Modifié par RedSkidy le 24/03/2014 à 15:55
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 jeudi 10 avril 2008 Statut Membre Dernière intervention 27 septembre 2016 98
24 mars 2014 à 16:00
Ce sujet a 10 ans x)
0
RedSkidy Messages postés 196 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 22 octobre 2015 6
Modifié par RedSkidy le 24/03/2014 à 17:02
ha oui XD
0