CommentCaMarche
Recherche
Posez votre question Signaler

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

juni 79Messages postés samedi 3 janvier 2004Date d'inscription 16 février 2006Dernière intervention - Dernière réponse le 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.
Lire la suite 
Réponse
+3
moins plus
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!!!
Welgriv- 8 mars 2014 à 16:05
ne fonctionne pas
Répondre
jesus- 19 déc. 2014 à 19:56
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
Répondre
fiddy 10187Messages postés samedi 5 mai 2007Date d'inscription ContributeurStatut 2 mars 2015Dernière intervention - 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...
Répondre
jesus- 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);
Répondre
fiddy 10187Messages postés samedi 5 mai 2007Date d'inscription ContributeurStatut 2 mars 2015Derniè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;
}
Répondre
Ajouter un commentaire
Réponse
+2
moins plus
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à
griviere42 472Messages postés samedi 25 avril 2009Date d'inscription 30 octobre 2013Dernière intervention - 13 août 2012 à 09:37
Je confirme, il est obligatoire de spécifier la taille
Répondre
Welgriv- 8 mars 2014 à 16:06
et comment on fait si on ne connais pas la taille avant d'exécuter le programme ?
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 690Messages postés jeudi 10 avril 2008Date d'inscription 8 janvier 2015Dernière intervention - 24 mars 2014 à 16:00
Ce sujet a 10 ans x)
Répondre
RedSkidy 195Messages postés jeudi 30 janvier 2014Date d'inscription 12 février 2015Dernière intervention - 24 mars 2014 à 17:01
ha oui XD
Répondre
Ajouter un commentaire
Ce document intitulé «  c++ tableau 2D en arg d'une fonction  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.