bonsoir à tous le monde je suis nouveau en c
j'ai lu le cours sur les pointeurs
j'aimerais faire un exemple d'une fonction qui me permet de manipuler un tableau en pointeur et de le retourner
je n'arrive pas
comment je fait
merci
bonsoir à tous le monde je suis nouveau en c
j'ai lu le cours sur les pointeurs
j'aimerais faire un exemple d'une fonction qui me permet de manipuler un tableau en pointeur et de le retourner
je n'arrive pas
comment je fait
merci
Bonsoir light86,
Bravo light86.... On est tous passés par là.
Est-ce que tu peux préciser sur quoi tu bloques ?
Par exemple, as-tu un bout de code qui ne fonctionne pas où que tu n'arrives pas à finir ?
Ou bien y a t-il quelque chose en particulier sur lequel tu aimerais des précisions ?
bonjour voila j'ai un tableau ,j'aimerais le modifier dans une fonction et le retourner après
je n'arrive pas à démarrer
merci
Peux-tu expliquer la nature des modifications que ta fonction doit apporter au tableau qu'elle reçoit en paramètre ?
Par exemple : doit-elle en changer la taille ou bien juste le contenu ?
Est-ce que ta fonction connait implicitement la taille du tableau qui lui est passé, ou bien est-ce que cette taille peut varier d'un appel à l'autre ?
C'est un tableau de quoi au fait : des floats ? des ints ? des chars ? des structures ? autre chose ?
Une fois que tu sais ça, tu peux écrire un prototype de la fonction (au sens C du terme, c'est à dire la déclaration de la fonction).
- Une fonction ne peut pas retourner un tableau. Par contre, elle peut retourner l'adresse du début d'un tableau (à condition que le tableau ne soit pas en allocation automatique, donc défini localement à la fonction)bonjour voila j'ai un tableau ,j'aimerais le modifier dans une fonction et le retourner après
- On ne peut pas avoir un tableau en paramètre d'une fonction : Si on met un tableau en argument d'une fonction, on passe en fait l'adresse du premier élément de ce tableau et le paramètre correspondant dans la fonction est un pointeur.
Toute modification du tableau effectuée via cette adresse modifie donc le tableau d'origine :
La déclaration void fonc(int t[]) est interprétée par le compilateur comme void fonc(int * t) . C'est le seul contexte (paramètre d'une fonction) où une notation tableau est en fait équivalente à une notation pointeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void fonc(int * t) { t[1] = 2* t[0]; } int tab[5]= {1,0,0,0,0}; fonc(tab); // tab == {1,2,0,0,0}
Salut light86
Comme tu le vois, on est tous contents que tu t'intéresses au C.
Diogène t'a montré un exemple de fonction modifiant un tableau, je vais te détailler son fonctionnement.
Le main() démarre. Il instancie un tableau de 5 éléments appelé "tab". A ce moment là, tu as 5 cases mémoires contigües (très important) de réservées pour tab. Ces 5 cases ont une adresse qui se suivent donc si la première est en 0x10, les autres sont en 0x11, 0x12, 0x13 et 0x14.
Ensuite, il passe tab à la fonction fonc(). Ce qu'il faut savoir ici, c'est que la variable "tab" correspond à l'adresse de la première case donc &tab[0] donc ici 0x10. Donc fonc() reçoit 0x10.
Cette valeur 0x10 étant une adresse, il faut impérativement la ranger dans un pointeur. Comme à cette adresse il y a un entier, alors c'est un pointeur sur int donc un "int étoile" (important le mot "étoile") et la variable stockant cette adresse se nommera "t"
Maintenant que la fonction possède l'adresse 0x10 (il s'agit de la même que celle du main() bien évidemment puisqu'il n'y a qu'une zone mémoire pour tout le programme) stockée dans t, elle peut aller à cet endroit t[0] et modifier la valeur ce qui sera alors répercuté dans tab[0] puisque dans le main() ce nom identifie la même case. Ou bien aller à la case d'à coté t[1] ou bien t[2] etc jusqu'à t[4].
Tu peux même aller taper dans t[5] ou t[6] ou t[18] si t'en as envie car il n'y a pas de garde fou mais dans ce cas le comportement sera imprévisible donc à toi de toujours connaitre tes propres contraintes et les respecter...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager