Bonjour,
D'après ce que j'ai compris, on peut considérer une fonction comme une variable qui possède sa propre adresse mémoire, puisque chaque morceaux de code occupe une place mémoire. J'ai voulu comprendre comment traiter les pointeurs sur les fonctions en s'appuyant sur les pointeurs sur variables. en fait, une fonction serait plus une référence, puisque f et &f ont la même adresse mémoire.
(Je n'ai pas vu cela dans les livres que j'ai lui, mais je trouve que c'est clair comme ca)
De la même manière que l'on déclare une variable
on déclare une fonction comme ceci par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2int o;
Supposons qu'on ait une fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int f(int);
Maintenant, on peut faire passer cette fonction "par valeur" comme n'importe quelle variable. On peut considérer que la fonction suivante est une composition de fonction f°g(x), où x est l'entier r.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int f(int o){ return o+1;}
Mais on peut aussi faire ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main(){ int f1(int ft(int),int r){ int ff=ft(r); return ff+10; }
Quelle est d'ailleurs la différence avec le code précédent?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int f2(int ft(int o),int r){ int ff=ft(r); return ff+20; }
Comme les variables, on peut faire passer les fonctions par références:
et on aura:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int f3(int (&ft)(int o),int r){ int ff=ft(r); return ff+30; }
Même question: quelle est la différence avec les cas précédents? Parce qu'ici, on ne cherche pas a modifier la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int main(){ int o3=f3(f,2); }
Enfin, comme pour les variables, on a les pointeurs sur fonctions, avec un code spécifique:
Donc fct est un pointeur sur la fonction f. Pour l'utiliser, on la déférence comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part int (*fct)(int c)=&f;
et on l'utilise comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int f4(int (*ft)(int o),int r){ int ff=(*ft)(r); return ff+40; }
où comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int o4=f4(fct,4);
Je voudrais savoir s'il est possible de faire qqch comme cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int (*g)(int)=&f; o=(&f)(5);
parce qu'apparement ca fait planter le compilateur, g ne peut pas être initialisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int g(int)=f; //ou int g(int)=f(int);
D'après ce que j'ai vu, un pointeur sur fonction permet d'aller plus vite et d'économiser de la place mémoire, puisqu'on ne recrée pas de variables. Cela permet aussi de créer des "variables de fonctions" que l'on peut réutiliser dans le code.
Merci
Edit:
Bien sur, tout cela n'est que pur spéculation, j'attends vos corrections, commentaires, ajouts... avec remerciements de ma part.
Partager