passage de tableau dans une fonction (débutant)

passage de tableau dans une fonction (débutant) - C - Programmation

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 !!

Reply

Marsh Posté le 02-10-2004 à 17:43:10   

Reply

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

Reply

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 ?

Reply

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

Reply

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


Message édité par Sve@r le 02-10-2004 à 23:00:08

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed