cs_MATHIS49
Messages postés368Date d'inscriptionvendredi 10 octobre 2003StatutMembreDernière intervention14 mai 2010
-
22 déc. 2005 à 11:32
cs_MATHIS49
Messages postés368Date d'inscriptionvendredi 10 octobre 2003StatutMembreDernière intervention14 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
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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);
}
cs_MATHIS49
Messages postés368Date d'inscriptionvendredi 10 octobre 2003StatutMembreDernière intervention14 mai 20101 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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