Comment créer un "pointeur de fonction" (et (par exemple) la fonction a des paramètres) dans C?Pointeur de fonction dans C
Répondre
http://www.newty.de/fpt/index.html
typedef int (*MathFunc)(int, int);
int Add (int a, int b) {
printf ("Add %d %d\n", a, b);
return a + b; }
int Subtract (int a, int b) {
printf ("Subtract %d %d\n", a, b);
return a - b; }
int Perform (int a, int b, MathFunc f) {
return f (a, b); }
int main() {
printf ("(10 + 2) - 6 = %d\n",
Perform (Perform(10, 2, Add), 6, Subtract));
return 0; }
Exemple intéressant - * ajout * un flotteur et deux chars? –
Bien sûr, n'avez-vous pas toujours voulu ajouter 3.145 à 'z' et retourner le résultat sous la forme d'un entier? Je vais changer l'exemple pour quelque chose d'un peu plus sain. –
typedef int (*funcptr)(int a, float b);
funcptr x = some_func;
int a = 3;
float b = 4.3;
x(a, b);
Je trouve ce site utile lorsque j'ai été plongée dans des pointeurs de fonction.
d'abord déclarer un pointeur de fonction:
typedef int (*Pfunct)(int x, int y);
Presque la même chose que d'un prototype de fonction.
Mais maintenant tout ce que vous avez créé est un type de pointeur de fonction (avec typedef
).
Alors maintenant, vous créez un pointeur de fonction de ce type:
Pfunct myFunction;
Pfunct myFunction2;
maintenant attribuer des adresses de fonction à ceux, et vous pouvez les utiliser comme ils sont des fonctions:
int add(int a, int b){
return a + b;
}
int subtract(int a, int b){
return a - b;
}
. . .
myFunction = add;
myFunction2 = subtract;
. . .
int a = 4;
int b = 6;
printf("%d\n", myFunction(a, myFunction2(b, a)));
pointeurs de fonction sont très amusant .
De plus, nous pouvons créer ensemble de pointeurs pour fonctionner:
double fun0(double x, double y) {
return x + y;
}
double fun1(double x, double y) {
return x - y;
}
double fun2(double x, double y) {
return x/y;
}
int main(int argc, char*argv[]) {
const int MaxFunSize = 3;
double (*funPtr[MaxFunSize])(double, double) = { fun0, fun1, fun2 };
for(int i = 0; i < MaxFunSize; i++)
printf("%f\n", funPtr[i](2.5, 1.1));
return 0;
}
Vous pouvez également définir des fonctions qui renvoient des pointeurs vers les fonctions:
int (*f(int x))(double y);
f est une fonction qui prend un seul paramètre int et renvoie un pointeur sur une fonction qui prend un double paramètre et retourne int.
- 1. C: pointeur de fonction et typedef problème
- 2. Déclaration récursive du pointeur de fonction dans C
- 3. pointeur pointeur C++ Méthodes
- 4. Pointeur vers un pointeur dans l'objectif-c?
- 5. Passe pointeur vers un tableau dans Haskell à C Fonction
- 6. Impossible de convertir argument pointeur de fonction
- 7. fonction javascript pointeur
- 8. Test d'un pointeur de fonction C# (délégué) pour Null
- 9. Pointeur de fonction C++ en tant que membre statique
- 10. Paramètres de fonction: Copie ou pointeur?
- 11. Initialisation de pointeur? pour une fonction spécifique
- 12. Pointeur de fonction de membre polymorphe
- 13. Pointeur de fonction C++ (membre de la classe) vers la fonction de membre non statique
- 14. C - Combinaison incorrecte pointeur/entier dans strftime()
- 15. pointeur de fonction: adresse physique ou virtuelle
- 16. génération de foncteur de type pointeur de fonction membre
- 17. C#: convertir pointeur générique tableau
- 18. C et notation pointeur
- 19. Problèmes de pointeur avec surcharge en C++?
- 20. Comment faire une fonction retourne un pointeur sur une fonction? (C++)
- 21. C++ déduction de « pointeur non de type à la fonction » modèle de classe paramètres
- 22. Comparaison d'un pointeur sur la valeur d'une fonction dans Delphi
- 23. problème de pointeur de fonction réécrite à la classe de base modèle C++
- 24. JavaScript SetInterval - pointeur de fonction passe au lieu de chaîne
- 25. Un pointeur de fonction membre appelle un constructeur de copie?
- 26. C++: Pointeur vers la fonction de membre de classe à l'intérieur d'une structure non apparentée
- 27. Comment appeler un pointeur de fonction membre en utilisant un pointeur vers un objet constant?
- 28. pointeur Unsafe/notation de tableau en C#
- 29. Un pointeur de fonction qui pointe vers une fonction qui prend un objet d'une classe de modèle avec ledit pointeur de fonction comme argument de modèle. Possible?
- 30. question pointeur de base dans le programme C++
duplication possible de [Comment fonctionnent les pointeurs de fonction en C?] (Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work) –