Concepts en C

Cohérence, logique et fonctionnement du C


précédentsommairesuivant

VII. Pointeurs sur fonctions

Si on se réfère à la définition des objets utilisée dans ce texte, les fonctions ne sont pas des objets. Par contre, il est possible de stocker les informations nécessaires à l'activation d'une fonction dans un objet appelé pointeur sur fonction. Le terme pointeur est utilisé ici dans un sens étendu par rapport à celui utilisé précédemment dans ce texte (puisqu'il ne contient pas l'adresse d'un objet) mais justifié par le fait que la syntaxe utilisée est analogue à celle des adresses d'objets.

Les pointeurs sur fonctions sont fréquemment utilisés pour passer une fonction comme argument d'une autre fonction. Cette dernière est alors souvent un cadre général de résolution d'une classe de problèmes et ceci permet d'ajuster son comportement à un problème précis (cas typique : la fonction standard de tri qsort).
On rencontre aussi ces objets associés en tableau. Une telle structure peut éviter alors un switch ou une collection de if imbriqués en les remplaçant par une simple indexation dans le tableau et facilite ainsi la maintenance du programme.


Le type Tf "fonction retournant un typeT et ayant des arguments de typesT1, T2, ...", s'écrira en accord avec la déclaration des fonctions :

T   Tf ( T1T2,  ...)


Pour écrire un type Taf "adresse d'une fonction retournant un type T et ayant des arguments de types T1, T2, ...", on écrira donc qu'à l'adresse de type Taf , (*Taf), on a une fonction :

T   (*Taf )  ( T1T2,  ...)
exemple
Sélectionnez
     /* Un pointeur F sur une fonction retournant un double et
        ayant un double pour argument */ 
 double (*F)(double);
     /* Pour lui donner une valeur, par exemple la fonction sin
        de la bibliothèque */
 F = sin;
     /* la fonction sin pourra alors être activée par */
 sin(...);
     /* ou par */
 (*F)(...);
     /* et même par */
 F(...);
     /* Cette dernière écriture est, à mon avis, à éviter car elle 
        porte à confusion en laissant penser qu'il existe une 
        fonction F quelque part dans le programme. */

On remarquera, sur l'exemple ci-dessus, que l'identificateur de la fonction (sin) est assimilé à un pointeur sur la fonction double sin(double)


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.