Leçon 21 : Les pointeurs de fonctions
Ce ne sont pas seulement les variables qui habitent en mémoire — le code des fonctions aussi, donc les fonctions ont elles aussi des adresses. Un pointeur de fonction stocke une telle adresse : int (*op)(int, int); — et les parenthèses autour de (*op) sont critiques, sans elles c'est une déclaration
Un pointeur de fonction est comme un bouton de numérotation rapide sur un téléphone : le bouton lui-même ne sait pas parler, il stocke seulement 'qui appeler'. On peut lui assigner maman ou la pizzeria — appuyer dessus (l'appel) active celui qui y est stocké en ce moment.
- pointeur de fonction
- Une variable qui stocke l'adresse d'une fonction — on peut appeler à travers elle et changer sur quoi elle pointe.
- anatomie de la déclaration int (*op)(int, int);
- op est un pointeur vers une fonction qui prend deux int et renvoie un int. Les parenthèses autour de (*op) sont la partie critique.
- nom de fonction comme adresse
- Un nom de fonction sans parenthèses (comme add) est son adresse — c'est pourquoi op = add; fonctionne.
- callback (fonction de rappel)
- Une fonction qu'on passe comme pointeur à une autre fonction, pour qu'elle soit invoquée au bon moment.
- le comparateur de qsort
- qsort reçoit un pointeur vers une fonction de comparaison — c'est ainsi qu'elle peut trier n'importe quel type.