2009-08-14 8 views
3

Comment créer un "pointeur de fonction" (et (par exemple) la fonction a des paramètres) dans C?Pointeur de fonction dans C

+0

duplication possible de [Comment fonctionnent les pointeurs de fonction en C?] (Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work) –

Répondre

15

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; } 
+0

Exemple intéressant - * ajout * un flotteur et deux chars? –

+0

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. –

5
typedef int (*funcptr)(int a, float b); 

    funcptr x = some_func; 

    int a = 3; 
    float b = 4.3; 
    x(a, b); 
0

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 .

0

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; 
} 
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.

Questions connexes