Les pointeurs vers des fonctions

nicolas -  
kilian Messages postés 8854 Statut Modérateur -
bonjour !
voila je suis en train de programmer sous linux et j'ai besoin d'utiliser les pointeurs de fonctions or je ne trouves pas vraiment de doc dessus
est ce ke kelkun peut m'expliquer comment déclarer un pointeurs de fonction et comment obtenir l'adresse d'une fonction?
voila merci d'avance
A voir également:

3 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Oups, je me rattrape vite fait, les arguments des pointeurs de fonction n'ont pas de nom, juste un type, donc notre pointeur de tout à l'heure sera:
int (*bidule) (char)


Et l'adresse d'une fonction, ce n'est pas juste son nom mais il faut aussi utiliser l'opérateur &
Donc l'exemple de tout à l'heure corrigé ça donne:
int machin(char truc);
//Puis le pointeur
int (*p_fonction) (char);
//Et on pointe:
p_fonction = &machin; 
/*Le nom d'une fonction avec & devant  représente son adresse*/

http://casteyde.christian.free.fr/online/cours_cpp/x2102.html
12
kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

D'abord, il faut t'assurer que ton pointeur de fonction retourne le même type et prend le même nombre et le même type de paramètre que la fonction vers laquelle il pointe. En gros un pointeur de fonction doit être un moule de la même taille.

Un exemple simple pour déclarer un pointeur de fonction qui prend un paramètre char et retourne un entier:
int (*p_fontion) (char bidule)


Tu saisis? (*p_fonction) est entre parenthèses pour signifier que c'est un pointeur, c'est à bien distinguer d'un vraie fonction qui retournera un pointeur:
int *p_fonction(char bidule)

La j'ai déclaré une vraie fonction qui retournera un pointeur d'entier.
Donc il faut bien mettre l'opérateur * et le nom du pointeur entre parenthèses.

Ceci dit, pour compliquer les choses, si tu veux que ton pointeur de fonction retourne un pointeur d'entier ce sera:
(int *) (*p_fonction)(char bidule)


Maintenant si tu veux faire pointer l'adresse d'une fonction vers ton pointeur (je garde le pointeur du premier exemple), eh bien prenons une vraie fonction (même type, même type et nombre de paramètre):
int machin(char truc);
//Puis le pointeur
int (*p_fontion) (char bidule);
//Et on pointe:
p_fonction = machin; //Le nom d'une fonction représente son adresse
10
nicolas
 
merci bien ça m'aidera dans le dévelopement de mon programme
effectivement c assez compliquez ,en fait je les avais deja utilisé il y'a longtemps mais on perd de memoire la mannière dont il faut ecrire c trucs la d'ailleurs on peut le voir pour toi car tu as fait des erreurs ;)
enfin voila merci bcp
salut
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Wep, d'ailleurs je m'en suis encore jamais trop servi (je m'arrange pour ne pas reflechir jusque là je crois :-)
0