"array" aus Funktionen



  • Gut ok, danke. Muss mich noch ein wenig einlesen in die Vorschläge 😉



  • Habe es mal mit einem Funktionszeiger versucht.

    int formel_1(int a, int b){
    
        return a*b;
    }
    
    int formel_2(int a, int b){
    
        return a/b;
    }
    
    void calc_(int (*formel)(int, int))
    {
        int a = 40, b = 8;
        int ergebnis = formel (a, b);
        std::cout << ergebnis << '\n';
    }
    
    void aufruf_(int (*formel)(int, int))
    {
        formel = &formel_1;
        formel = &formel_2;
    
        calc_(formel_1);
        calc_(formel_2);
    
    }
    
    int main()
    {
    
        int (*formel)(int, int) = 0; // Anlegen eines Funktionszeigers, Initialisierung mit 0
    
        aufruf_(formel);
    
    }
    

    Wäre der soweit in Ordnung oder kann man das besser formulieren?



  • Was soll jetzt die aufruf_ Funktion und der Funktionspointer dort als Parameter? Ansonsten sieht das dann schon OK aus. Angewandt auf deinen Code würde deine showPlasmaScroller Funktion statt dem size_t plasma_idx Parameter dann einfach einen Funktionspointer nehmen und diese Funktion aufrufen.



  • Ich wollte das Beispiel eben näher bei meinem aktuellen Einsatzzweck schreiben. Und calc_() soll nicht in der main aufgerufen werden, sondern in einer weiteren Funktion.

    Mit Funktionspointer kann ich jetzt aber nichts anfangen. Ist ein Zeiger nicht ein Pointer bzw?



  • Ja Zeiger = Pointer. Jedenfalls ist der Parameter in der aufruf_ Funktion ziemlich sinnlos. Du übergibst von der main Funktion einen Zeiger der aber auf 0 zeigt, dann schreibst nacheinander die Adressen von zwei Funktionen da rein, nutzt den Pointer aber nie. So würde die Funktion genau das gleiche tun:

    void aufruf_()
    {
        calc_(formel_1);
        calc_(formel_2);
    }
    


  • Ok, dann ist aber nur hier überflüssig:?

    void aufruf_(int (*formel)(int, int))
    {
        //formel = &formel_1;
        //formel = &formel_2;
    
        calc_(formel_1);
        calc_(formel_2);
    
    }
    
    int main(){
    
        int (*formel)(int, int) = 0; // Anlegen eines Funktionszeigers, Initialisierung mit 0
    
        aufruf_(formel);
    
    }
    


  • Der ganze Parameter und die Variable in der main Funktion kann weg.



  • Ah, also?

    int formel_1(int a, int b)
    {
    
        return a*b;
    }
    
    int formel_2(int a, int b)
    {
    
        return a/b;
    }
    
    void calc_(int (*formel)(int, int))
    {
        int a = 40, b = 3;
        int ergebnis = formel (a, b);
        std::cout << ergebnis << '\n';
    }
    
    void aufruf_()
    {
    
        calc_(formel_1);
        calc_(formel_2);
    
    }
    
    int main(){
    
        aufruf_();
    
    }
    

    Aber bzw und beschwert sich der Compiler über die ungenutzte Variable 'formel'?

    EDIT: geändert



  • Uh, wenn das jetzt stimmt, ist mir das direkt ein wenig unheimlich, wie einfach das am Ende ist 😉



  • Ja stimmt. Eigentlich sind Funktionspointer auch nicht so kompliziert, außer der etwas merkwürdigen Syntax und wenn man sich mit dem Konzept angefreundet hat, dass man Funktionen als Parameter an andere Funktionen übergibt.



  • Jupp, danke vielmals 🙂 Wieder was gelernt.


  • Mod

    Und nun siehst du, wieso man nach dem fragt, was man erreichen möchte, nicht nach dem, wie man denkt, wie man zum Ziel kommt.



  • Amen 😉



  • Äh ... sorry, meinte natürlich danke 😉 War wohl gestern im falschen Film.


Anmelden zum Antworten