Funktionszeiger

Zeiger können nicht nur auf Variablen zeigen sondern auch auf Funktionen. Diese besonderen Zeiger nennt man Funktionszeiger.

Nehmen wir zum Beispiel eine Funktion divide(), der wir einen Funktionszeiger auf eine Funktion übergeben, die aufgerufen werden soll, wenn eine Division durch 0 stattfindet. Diesen Mechanismus nennt man Callback.

    #include<iostream>
    using namespace std;

    double divide(double lhs, double rhs, void callback())
    {
      if( -0.000001<rhs && rhs<0.000001 )
      {
        callback();
        return 0;
      }
      return lhs/rhs;
    }
    
    void error()
    {
      cout<<"FEHLER\n";
    }

    int main()
    {
      divide(1,0,error);
    }
    
Tip!!Statt mittels int foo(int) kann man einen Funktionszeiger auch mittels int (*foo)(int) erstellen. Die zweite Variante ist die gängigere, denn mit der ersten Variante kann man keinen Funktionszeiger direkt als Variable erstellen. int foo(int); wäre ja die Deklaration einer Funktion foo. int (*foo)(int); ist ein Zeiger auf eine Funktion.

callback ist ein Zeiger auf eine Funktion - nämlich auf error(). Um einen Zeiger auf die Funktion error() zu bekommen, lässt man einfach die Klammern weg: error.

Der Typ eines Funktionszeigers ist die Signatur der Funktion. Ein Zeiger auf eine Funktion int foo(int) kann nicht auf eine Funktion void foo(int) zeigen.

Für vertiefende Informationen zu Funktionszeigern empfehle ich: www.Function-Pointer.org.

top