[DEBUTANT] pb de reference [Résolu]

Signaler
Messages postés
368
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010
-
Messages postés
368
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
368
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010

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 ;)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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);
}
Messages postés
368
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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