[DEBUTANT] pb de reference

Résolu
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 - 22 déc. 2005 à 11:32
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 - 22 déc. 2005 à 13:46
bonjour pour apprendre, j'essai de faire passer un tableau en reference dans une fonction , mais j'ai une erreur dont je n'ai pas trouvé de reponse sur google .

Mon tout petit script :

#include <cstdlib>
#include

using namespace std;

void MaFonction(int &tableau)
{
//on affiche les donnes de la celulle [3][4] du tableau
cout<<tableau[3][4]<<endl;

}

int main(int argc, char *argv[])
{
//déclaration des variables
int largeur=6 ;
int hauteur=6;
int tableau[largeur][hauteur];
int i;
int j;

//on rempli le tableau [6][6] de 0
{
for(i=0;i<hauteur;i++)
for(j=0;j<largeur;j++)
{
tableau[i][j]=0;
}
}
//on appelle la fonction
MaFonction(tableau[largeur][hauteur]);

system("PAUSE");
return EXIT_SUCCESS;
}


Ma petite erreur :

In function `void MaFonction(int&)':
invalid types `int[int]' for array subscript
[Build Error] [main.o] Error 1


Merci à toi jeune padawan !

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 déc. 2005 à 12:38
J'oublie: un tableau n'a jamais besoin d'être passé par référence, car sa valeur ne sera jamais modifiée (l'adresse d'un tableau est constante)
C'est un peu délicat, mais on peut considérer que la valeur d'un tableau c'est son adresse
3
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 1
22 déc. 2005 à 13:46
Merci en effet tu avais raison, en cherchant un peut plus j'ai trouvé ce site que je conseille à tout les débutants :

http://c.developpez.com/faq/c/?page=tableaux#TABLEAUX_tableau_parametre_ndimension

Merci à toi vecchio56 ;)
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 déc. 2005 à 12:14
int &tableau n'est pas un tableau passé par référence, mais un entier passé par référence
Si tu veux passer le tableau:
void MaFonction(int** tableau)
{
//on affiche les donnes de la celulle [3][4] du tableau
cout<<tableau[3][4]<<endl;
}

int main(int argc, char *argv[])
{
int tableau[largeur][hauteur];
...
MaFonction(tableau);
}
0
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 1
22 déc. 2005 à 12:28
Merci beaucoup mais en faisant :

#include <cstdlib>
#include

using namespace std;

void MaFonction(int** tableau)
{
//on affiche les donnes de la celulle [3][4] du tableau
cout<<tableau[3][4]<<endl;

}

int main(int argc, char *argv[])
{
//déclaration des variables
int largeur=6 ;
int hauteur=6;
int tableau[largeur][hauteur];
int i;
int j;

//on rempli le tableau [6][6] de 0
{
for(i=0;i<hauteur;i++)
for(j=0;j<largeur;j++)
{
tableau[i][j]=0;
}
}
//on appelle la fonction
MaFonction(tableau);

system("PAUSE");
return EXIT_SUCCESS;
}


J'ai l'erreur :

31 cannot convert `int (*)[((unsigned int)((int)hauteur))]' to `int**' for argument `1' to `void MaFonction(int**)'


Ps : quelle est la difference entre & et ** ?

MErci
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 déc. 2005 à 12:36
C'est vrai, dans ce cas tu peux mettre
void MaFonction(int tableau[6][6])
{
//on affiche les donnes de la celulle [3][4] du tableau
cout<<tableau[3][4]<<endl;
}

La différence en & et * c'est que dans la fonction, avec un & tu n'a pas besoin de déréférencer la variable. Mais c'est comme si c'était un pointeur
0
Rejoignez-nous