toff86
Messages postés9Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention22 décembre 2004
-
26 nov. 2004 à 18:44
globe_dk
Messages postés6Date d'inscriptionjeudi 23 décembre 2004StatutMembreDernière intervention24 décembre 2004
-
23 déc. 2004 à 15:23
Salut !!
J'suis débutant en C. Mon probleme est le suivant:
Je sais comment fonctionne le passage de parametres d'une variable avec les foncions. Mais je ne sais pas comment cela fonctionne avec un tableau. Si quelqu'un pouvais me faire un petit tuto tout simple et si possible sans pointeurs, je suis preneur.
Merci d'avance
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 26 nov. 2004 à 19:41
par ddéfinition on ne peut pas passer un tableau en parametre à une fonction
mais il suffit de passer un pointeur (=variable qui contient une adresse) qui contiendra l'adresse du premier element du tableau (= son nom)
/* le prototype de la fonction */
void func( int *v ); /* ou const int *v si la fonction ne modifie pas les données pointées par v */
int v[10]; /* v est l'adresse de son premier element */
/* appel */
func( v );
dans la fonction, utilise v comme un pointeur, tu peux (comme pour un tableau) acceder aux éléments avec l'opérateur []
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 26 nov. 2004 à 19:42
Passage de parametres sans parler de pointeurs, c pas possible, regarde je t'explique, je prends l'exemple d'une fonction que tu as surement du utiliser :
char strcpy(char *dest, const char *src);
lorsk tu appelles strcpy, tu fais de cette maniere :
char szdest[256];
char szsrc[] = "Coucou";
strcpy(szdest, szsrc);
Tu as passé en parametre de la fonction, tes deux tableaux...Mais la particularité du C, c que lorsk tu ecris :
szdest;
Tu designes en fait ceci : &szdest[0], qui est l'adresse du premier element du tableau, et ceci peu impote le type du tableau (int, char...etc).
Donc si tu veux passer un tableau a une fonction que tu crées toi mm, le prototype peut etre :
int coucou(int *hello);
int coucou(int hello[]);
int coucou(int hello[520]); //peu importe la 'taille ke tu mets' (ici 520), elle ne sera pas prise en compte
Ces trois ecritures sont totalement equivalentes.
Et pour l'appeler, tu feras de cette maniere :
int hello[500];
coucou(hello);
Et dans ta fonction coucou, tu utilises le tableau de la mm maniere que dans la fonction appelante :
int coucou (int *hello) {
coucou[2] = coucou[0] + coucou[1];
....
}
Pour connaitre la taille de ton tableau dans 'coucou' , il te faudra ajouter un parametre ki contiendra cette taille, paskun appel a sizeof te donnera 4 (taille d'un pointeur car ca designera, comme dit plus haut, &hello[0]). Voila :
int coucou(int *hello, int len);
Voila, j'espere avoir répondu a la question, sinon, si kelks aspects restent obscurs, n'hesite pas.
main() {
int tab[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
afficher(tab);
}
Ca ne marche pas ca et je ne comprend pas pourquoi. Il me met comme erreur : error C2664: 'afficher' : impossible de convertir le paramètre 1 de 'int [2][5]' en 'int *'