Advanced   Java   Services typedef und Funktionspointer Back Next Up Home


typedef und Funktionspointer

Mit typedef kann man Namen für Funktionspointern einführen. Das kann die Lesbarkeit komplexer Funktionen deutlich erhöhen. Im folgenden wird ein Funktionspointer namens compute eingeführt, der für Funktionen steht, die zwei int-Parameter haben und ein int zurückgeben.

typedef int (*compute)(int, int);

Damit steht der Name compute für einen Funktionspointer für Funktionen, die zwei ints bekommen und ein double zurückgeben, egal welches Innenleben diese Funktionen haben. Dies ähnelt einer Funktionsdeklaration, nur beginnt man mit dem Schlüsselwort typedef und, setzt vor den Funktionsnamen einen Stern und setzt dann beides in Klammern.

Wir schreiben zwei einfache Funktionen add() und mult() mit passender Signatur.

int add(int a, int b)
{
   return a+b;
}

int mult(int a, int b)
{
   return a*b;
}

Nun wollen wir eine Funktion schreiben, die einen Funktionspointer erhält. Darüber hinaus sollen dieser Funktion noch zwei Integerwerte übergeben werden. Mit Hilfe des Funktionspointers soll dann das Ergebnis der Addition oder Multiplikation erzeugt werden und auf der Konsole ausgegeben werden.

Die erste Fassung der Funktion verwendet den mit typedef erzeugten Funktionspointertyp.

void print(compute rechne, int a, int b)
{
   printf("Ergebnis: %d\n", rechne(a,b));
}

Verzichtet man auf typedef so sieht die Signatur von print() wie folgt aus:

void print( int (*fpoi)(int, int) , int a, int b)
{
   printf("Ergebnis: %d\n", fpoi(a,b));
}

Eine Verwenung in main kann z.Bsp. so aussehen.

print(add, 3, 4);   // Ergebnis: 7
print(mult, 3, 4);  // Ergebnis: 12


























Valid XHTML 1.0 Strict top Back Next Up Home