Advanced   Java   Services Funktionspointer Back Next Up Home


Funktionspointer

Außer den "normalen" Pointern gibt es in C und C++ auch Pointer auf Funktionen. In C# gibt es mit den Delegates ein vergleichbares Konzept, in Java gibt es Funktionspointer (bisher) nicht. Ähnlich wie Pointer auf Variablen sind auch Funktionspointer typisiert. Der Typ richtet sich dabei nach der Signatur der Funktion (inklusive des Returntyps). Der Zugang zu Funktionspointer wird am besten durch einige Beispiel klar.




Funktionspointer auf Funktionen mit einfacher Signatur

Hier geben wir uns Funktionen vor und richten dazu dann einen Funktionspointer ein.





Funktionspointer auf Funktionen mit einfacher Signatur

Funktion ohne Parameter und Returntyp void

void kriegt_nix_gibt_nix()
{
   puts("kriegt_nix_gibt_nix");
}

Verwendung des Funktionspointers

// Deklaration/Definition
void (*funcptr1)();
// Zuweisung
funcptr1 = kriegt_nix_gibt_nix;
// Aufruf
funcptr1();

// Definition mit Zuweisung
void (*funcptr2)() = kriegt_nix_gibt_nix;

Funktion mit zwei Parametern und Returntyp void

void kriegt_was_gibt_nix(int a, int b)
{
   puts("kriegt_was_gibt_nix");
   printf("%d %d\n", a, b);
}

Verwendung des Funktionspointers

// Deklaration/Definition
void (*funcptr1)(int, int);
// Zuweisung
funcptr1 = kriegt_was_gibt_nix;
// Aufruf
funcptr1(3,4);

// Definition mit Zuweisung
void (*funcptr2)(int, int) = kriegt_nix_gibt_nix;

Als Parameter kommen alle in C möglichen Typen in Betracht. Auch kann die Parameterliste beliebig lang sein.

Funktion mit zwei Parametern und Returntyp double

double kriegt_was_gibt_was(int a, int b)
{
   puts("kriegt_was_gibt_was");
   double erg = (double)a/b;
   printf("input: %d %d  return: (double)a/b %lf\n", a, b, erg);
   return erg;
}

Verwendung des Funktionspointers

// Deklaration/Definition
double (*funcptr1)(int, int);
// Zuweisung
funcptr1 = kriegt_was_gibt_was;
// Aufruf
double erg = funcptr1(3,4);
printf("erg = %lf", erg);
// Definition mit Zuweisung
double (*funcptr2)() = kriegt_was_gibt_was;

Funktion mit Pointer als Parameter und Pointer als Returntyp

char* kriegt_pointer_gibt_pointer(char *st)
{
   puts("kriegt_pointer_gibt_pointer");
   puts(st);
   return st;
}

Verwendung des Funktionspointers

// Deklaration/Definition
char* (*funcptr1)(char*);
// Zuweisung
funcptr1 = kriegt_pointer_gibt_pointer;
// Aufruf
char* erg = funcptr1("hi");

// Definition mit Zuweisung
char* (*funcptr2)(char*) = kriegt_pointer_gibt_pointer;
Valid XHTML 1.0 Strict top Back Next Up Home