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.


  • Mod

    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 kannst fp entweder explizit dereferenzieren (wie in dieser Zeile) oder du kannst fp wie einen Funktionsnamen behandeln. Ist im Prinzip fast das gleiche.

    Dein Grundlagenbuch sollte doch alles erklären.


Anmelden zum Antworten