Zeiger auf Funktion
-
Ich habe in meinem Buch dieses Beispiel hier:
#include<cstddef> #include<iostream> using namespace std; int max(int x, int y) { return x > y ? x : y; } int min(int x, int y) { return x < y ? x : y; } int main() { int a = 1700, b = 1000; int (*fp)(int, int);//Was ist hiemit gemeint? do { char c; cout << "max (1) oder min (0) ausgeben (sonst = Ende) ?"; cin >> c; switch(c) { case '0' : fp = &min; break; //min braucht doch parameter oder nicht? case '1' : fp = max; break; //das gleiche hier auch. default : fp = NULL; } if(fp) { cout << (*fp)(a,b) << endl; //Was passiert hier? cout << fp(a,b) << endl; //das gleiche... } } while(fp); }
Aber ich verstehe das Beispiel nicht. Ich habe mal die Fragen im Text geschrieben. Ich habe nun keine komplette Fragen geschrieben weil ich es 0 verstehe. Ich hoffe es nimmt sich jemand die Zeit um mir zu helfen
-
Das sind Funktionszeiger.
Weist du was Zeiger und/oder Referenzen sind?
Das hier ist dasselbe nur auf Funktionsebene. Du zeigst nicht auf ein Datum oder auf mehrere Daten, sondern auf eine Operation quasi. In Zeile 24 und 25 wird dem zeiger nur ein Wert (also eine "Ziel"-Funktion) zugewiesen, die in Zeile 29/30 ausgeführt wird.
-
int (*fp)(int, int);//Was ist hiemit gemeint?
Dieses Statement deklariert einen Funktionszeiger. Du kannst
fp
dann wie eine Funktion aufrufen, sobald es initialisiert ist (mit der Adresse einer Funktion passenden Typs).case '0' : fp = &min; break; //min braucht doch parameter oder nicht?
Du nimmst die Adresse von
min
, und rufst es nicht auf.cout << (*fp)(a,b) << endl; //Was passiert hier?
Du rufst die Funktion auf, auf die
fp
zeigt. Du kannstfp
entweder explizit dereferenzieren (wie in dieser Zeile) oder du kannstfp
wie einen Funktionsnamen behandeln. Ist im Prinzip fast das gleiche.Dein Grundlagenbuch sollte doch alles erklären.