C++ tableau 2D en arg d'une fonction [Fermé]

juni 79 Messages postés samedi 3 janvier 2004Date d'inscription 16 février 2006 Dernière intervention - 18 mai 2004 à 15:18 - Dernière réponse : fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention
- 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.
Afficher la suite 
79Messages postés samedi 3 janvier 2004Date d'inscription 16 février 2006 Dernière intervention

15 réponses

juni 79 Messages postés samedi 3 janvier 2004Date d'inscription 16 février 2006 Dernière intervention - 18 mai 2004 à 15:22
+2
Utile
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.
Cette réponse vous a-t-elle aidé ?  
tafiscobar 1284 Messages postés jeudi 7 décembre 2000Date d'inscriptionContributeurStatut 26 février 2009 Dernière intervention - 18 mai 2004 à 20:00
+2
Utile
6
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!!!
Cette réponse vous a-t-elle aidé ?  
ne fonctionne pas
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
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention > 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...
jesus > fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 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);
fiddy 11141 Messages postés samedi 5 mai 2007Date d'inscriptionContributeurStatut 18 octobre 2016 Dernière intervention - 19 déc. 2014 à 23:00
Oui, c'est en C. Ici il était question de C++... Donc hors sujet.
Donc, il faut laisser cout << tab[i][j];
En C++ :
#include <iostream>

void fonction (const int tab[][3]) {
     for (int i=0;i < 3; i++) {
          for (int j=0; j < 3; j++)
               std::cout << tab[i][j];
          std::cout << std::endl;
     }
}

int main (void) {
     int tab[][3] = {{1,2,3},{4,5,6},{7,8,9}};
     fonction(tab);
     return 0;
}
+2
Utile
2
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à
Cette réponse vous a-t-elle aidé ?  
griviere42 472 Messages postés samedi 25 avril 2009Date d'inscription 30 octobre 2013 Dernière intervention - 13 août 2012 à 09:37
Je confirme, il est obligatoire de spécifier la taille
et comment on fait si on ne connais pas la taille avant d'exécuter le programme ?
juni 79 Messages postés samedi 3 janvier 2004Date d'inscription 16 février 2006 Dernière intervention - 18 mai 2004 à 18:59
0
Utile
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.
RedSkidy 199 Messages postés jeudi 30 janvier 2014Date d'inscription 22 octobre 2015 Dernière intervention - Modifié par RedSkidy le 24/03/2014 à 15:55
0
Utile
2
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
Crazy Legs 730 Messages postés jeudi 10 avril 2008Date d'inscription 27 septembre 2016 Dernière intervention - 24 mars 2014 à 16:00
Ce sujet a 10 ans x)
RedSkidy 199 Messages postés jeudi 30 janvier 2014Date d'inscription 22 octobre 2015 Dernière intervention - 24 mars 2014 à 17:01
ha oui XD