Syntax
Um über einen Funktionszeiger eine Funktion aufrufen zu können, muss die genaue Schnittstelle der Funktion angegeben sein, die auch Rückgabetyp und Parameter beinhaltet. Ein solcher Zeiger folgt dem Syntaxgraph aus Abbildung (graffuncptr).An dieser Stelle steht im Buch die Abbildung "Syntaxgraph für Funktionszeiger" (graffuncptr)
Kein Prototyp
Wichtig ist die Klammer um den Zeigernamen und den Stern. Dadurch wird verhindert, dass die Parameterklammer vom Compiler bevorzugt wird. Dann würde die Anweisung als Prototyp einer Funktion fehlinterpretiert werden.Beispiel
Um einen Zeiger auf die Funktion zum Einfügen einer ganzen Zahl in einen Baum zu definieren, orientieren Sie sich am besten an dem Prototyp der Funktion.tBaum * Einfuegen(tBaum *Blatt, int Inhalt); // Prototyp
Dann setzen Sie einen Stern vor den Funktionsnamen und schließen um beide eine Klammer. Schließlich müssen Sie noch die Parameternamen entfernen, und schon ist der Zeiger auf die Funktion definiert.
tBaum * (*EinfuegeZeiger)(tBaum *, int); // Funktionszeiger
Der Zeiger kann die Adresse einer Funktion durch direkte Zuweisung des Namens erhalten. Sie können dem Funktionsnamen dabei auch ein Adresszeichen voranstellen. Es schadet nicht und macht für den Leser etwas deutlicher, dass Sie die Adresse der Funktion ansprechen.
EinfuegeZeiger = Einfuegen; // erste Variante EinfuegeZeiger = &Einfuegen; // zweite Variante
Aufruf
Der Aufruf der Funktion über den Zeiger unterscheidet sich nicht vom direkten Aufruf der Funktion.Anker = EinfuegeZeiger(Anker, 22); // Aufruf über den Zeiger