passage de tableau dans une fonction (débutant) - C - Programmation
Marsh Posté le 02-10-2004 à 18:17:11
passe la taille (dans un size_t) en parametre, si tu passe a sizeof le tableau et un pointeur sur ce tableau ca te renverra pas la meme chose
apprends que tableau != pointeur
Marsh Posté le 02-10-2004 à 18:55:24
Oui j'ai vérifié avant de venir poster, en affichant ce qu'il y a dans mon tableau je n'ai que les 2 premiere valeurs de mon tableau:\
Tu peux me donner un exemple pour le size_t ?
Marsh Posté le 02-10-2004 à 19:24:58
void traiter_tableau(unsigned char *donnees, size_t nb);
/* un appel possible */
traiter_tableau( donnees, sizeof donnees / sizeof donnees[0] );
enfin ce n'est que mon avis mais j'utilise systematiquement ce design en ce qui concerne les tableaux
Marsh Posté le 02-10-2004 à 22:58:25
Si tu appliques l'opérateur "sizeof" à un tableau, tu obtiens en retour la taille du tableau.
Si tu appliques l'opérateur "sizeof" à un pointeur, tu obtiens en retour la taille du pointeur, c'est à dire 4. C'est comme ça.
Dans ton programme, la valeur "donnees" est un tableau alors que dans ta fonction, c'est un pointeur.
Lorsque tu passes un tableau à ta fonction (je présume que tu écris l'instruction "traiter_tableau(donnees)" ) tu ne lui passes que l'adresse du premier élément de ton tableau, c'est à dire que c'est comme si tu écrivais "traiter_tableau(&donnees[0])". Comme les éléments d'un tableau se suivent en mémoire, lorsque tu reçois l'adresse du premier élément dans un pointeur, tu peux incrémenter ce pointeur pour obtenir les autres éléments de ton tableau.
Il te suffit juste que ta fonction sache combien d'éléments elle doit traiter. Cette information, tu peux l'avoir
1) soit en la passant à la fonction en second paramètre "traiter_tableau(donnees, 3)"
2) soit ton tableau contient une valeur particulière (appelée "valeur sentinelle" ) et ta fonction boucle jusqu'à ce qu'elle tombe sur cette valeur (c'est comme cela que sont codées les chaînes en C)
3) soit tu décides que ton tableau ne fera que 3 valeurs et tu codes ta fonction pour ne pas dépasser ce nombre
Marsh Posté le 02-10-2004 à 17:43:10
Salut, je suis confronté a ce probleme sur un programme que je fais en
C. La solution est certainement tres simple et je suis sur que vous
allez pouvoir m'aider
J'aimerais faire passer le tableau suivant vers une autre fonction.
unsigned char donnees[] = { 0x18, 0x38, 0x28}
Pour ce faire j'utilise un pointeur de cette forme ;
void traiter_tableau(unsigned char *donnees) { ... }
Ce qui ne pose pas de probleme lors de la compilation, mais lorsque je
mesure la taille de mon tableau avant et apres le passage (avec un
sizeof()), j'obtiens 2 valeurs différente et je me retrouve au final
avec un plus petit tableau.
Si quelqu'un peut me donner la solution pour qu'aucune des valeurs de
mon tableau ne soit supprimer lors de son passage dans ma fonction
traiter_tableau.
Merci d'avance !!