« Introduction générale à la programmation/Pointeurs » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-(\{\{[cC]hapitre[^\}]*)\|\s*titre\s*=[^\n]*\s* +\1)
→‎Les pointeurs : exemples...
Ligne 12 :
Concrètement, chaque langage a sa propre définition de pointeurs, mais en programmation, un pointeur est une ''variable destinée à contenir une adresse''.
 
(Il est à noter qu'un pointeur peut contenir l'adresse d'un autre pointeur. Cela fait un pointeur de pointeur. Une tel besoin n'est pas extrêmement courant mais peut arriver. )
 
{{Exemple|titre=L'homme qui a vu l'homme qui a vu l'ours
| contenu =
Un moyen mnémotechnique pour comprendre et retenir les pointeurs c'est de faire l'analogie entre les pointeurs et l'expression populaire : « l'homme qui a vu l'homme qui a vu l'ours ».
 
L'ours est une variable (quelconque).
 
L'homme qui a vu l'ours est le pointeur qui sait quelle est l'adresse de l'ours. Il permet donc d'aller chercher l'ours (indirectement). Si on connait l'homme, il peut nous donner l'adresse de l'ours. Donc il n'y a plus besoin de connaitre l'ours lui même (la variable), puisqu'on peut le retrouver grâce à l'homme qui a vu l'ours (le pointeur qui connait son adresse).
 
Enfin, l'homme qui a vu l'homme qui a vu l'ours est le pointeur qui connait l'adresse de l'homme qui connait l'adresse de l'ours. Là encore, si l'on appelle le pointeur de pointeur, on connait le pointeur, donc l'ours. C'est à dire la variable. Simple, non ?
}}
 
* En langage c, une fonction ne peut retourner au maximum qu'une seule valeur.
Ligne 32 ⟶ 41 :
* En langage c le nom d'une fonction est un pointeur. On peut donc l'utiliser comme argument d'une fonction.
 
{{Exemple|titre=Exemple d'utilisation du pointeur
On écrit une fonction graphique. Cette fonction dessine f. Elle ne peut dessiner que la fonction qui s'appelle f. Si on remplace f par un pointeur de fonction que l'on passe en argument, elle pourra dessiner une fonction qui peut s'appeler f, g, h. Il suffit de faire pointer le pointeur de fonction sur f, g ou h.
| contenu =
 
On écrit une fonction graphique.
 
Cette fonction dessine f. par exemple f est la forme graphique "_/-\_".
//INITIALISATION :
f est une FORME GRAPHIQUE
f := "_/-\_"
//.
//DECLARATION DE LA FONCTION dessine_f :
fonction dessine_f()
dessine f
fin de fonction
 
Cela donne le résultat :
_/-\_
Avec la variable f qui est fixe, la fonction ne sait dessiner que la forme "_/-\_".
 
Si on remplace la valeur intrinsèque de f par un pointeur d'adresse, la fonction dessine_f elle pourra dessiner n'importe quelle forme, qui sera pointée par le pointeur d'adresse f. Il suffit de faire pointer le pointeur sur une autre forme pour que la fonction dessine autre chose.
//INITIALISATION :
f est un POINTEUR
g, h sont des FORMES GRAPHIQUES
g := "/-\/-\"
h := "--\/--"
//.
//DECLARATION DE LA FONCTION dessine_f :
fonction dessine_f()
dessine f
fin de fonction
//.
//APPEL DE LA FONCTION dessine_f en modifiant le pointeur :
//LE POINTEUR f POINTE SUR g
f = g
dessine_f()
//LE POINTEUR f POINTE SUR h
f = h
dessine_f()
 
Cela donne le résultat :
/-\/-\
--\/--
la fonction dessine_f aura successivement dessiné les fonctions g puis h, avec la même fonction et le même appel au pointeur f, mais le pointeur pointait la première fois vers la fonction g, et la deuxième fois vers la fonction h.
}}
 
 
 
{{Exemple|titre=Même exemple en utilisant le nom de la fonction comme pointeur | contenu =
Si l'on programme en C, le nom d'une fonction est un pointeur. On peut donc l'utiliser comme argument d'une fonction.
cela donne quelque chose du type :
//INITIALISATION :
g, h sont des FORMES GRAPHIQUES
g := "/-\/-\"
h := "--\/--"
//.
//DECLARATION DE LA FONCTION dessine_f :
fonction dessine_f
dessine dessine_f
fin de fonction
//.
//APPEL DE LA FONCTION dessine_f en modifiant le pointeur :
//LE POINTEUR f POINTE SUR g
dessine_f = g
dessine_f()
//LE POINTEUR f POINTE SUR h
dessine_f = h
dessine_f()
 
Dans la déclaration de la fonction, on demande de dessiner dessine_f, c'est à dire de récupérer l'adresse pointé par le pointeur du même nom que la fonction, et de dessiner ce qu'il y a à cette adresse...
 
Cette programmation n'est pas forcément très clair à la relecture, car on mélange la fonction (ce qu'elle doit faire : dessiner une forme graphique) avec ses propres arguments (on passe en argument la fonction à dessiner en allant pointer dessus, avec un pointeur ayant le même nom que la fonction).
 
}}
 
{{Bas de page | idfaculté = informatique
| précédent = [[../Récursivité/]]
}}
 
{{clé de tri|introduction generale a la programmation/pointeurs}}