Static Variablen



  • Ich habe in meinem Tutorial jetzt folgendes Script gesehen:

    #include <iostream>
    #include<conio.h>
    using namespace std;
    
    int foo(int value=0)
    {
        static int val=0;
        if(value!=0) val=value;
        return val;
    }
    
    int bar(int a)
    {
        {
            static int b=a;
          }
                //return b; //wuerde nicht gehen, da b zwar noch existiert
                            //aber der Sichtbarkeitsbereich bereits verlassen wurde
        return a;
    }
    
    int main()
    {
        foo(3);
        cout<<foo()<<'\n';
    
        getch();
    }
    

    Jetzt ist meine Frage:
    Woher kommt das "b" ?? Gehen sie davon aus, dass die Funktion bereits einmal aufgerufen wurde ?? Und noch eine letzte Frage = Wofür ist das return ??
    Wäre super, wenn ihr die Fragen mal durchgehen könntet.

    Vielen Dank im Voraus und
    Liebe Grüße Flo



  • Hallo Florian,

    deine b Variable hat du in deiner Funktion eigentlich deklariert, aber zum mitschreiben.

    static int b=a;
    

    Bin zwar kein Experte aber hier hast du einen Integer deklariert (Ganzzahlen) mit der variable b.
    Return ist hier nichts anderes als ein Stop deiner Funktion zusätzlich wirfst du hier deine variable a zurück.
    Heißt die Funktion gibt den Wert von a zurück.

    Hoffe ich konnte helfen 😃



  • Vielen Dank schon mal,
    kurz vorher : Ich habe es nicht geschrieben, es stand in meinem Tutorial !

    Aber du sagtest:
    "deine b Variable hat du in deiner Funktion eigentlich deklariert, aber zum mitschreiben."

    Okay, dass mit return hat mir geholfen, aber was meinst du mit:
    "Zum Mitschreiben" ???

    Vielen Dank und LG



  • Hallo Florian,

    also was ich damit meinte ist das du mit deiner

    static Int
    

    Zeile, eine Nummer auf English Integer (deshalb Int) definiert hast.
    Hab dir hier ein gutes Tutorial rausgesucht, das es ziemlich gut auf
    den Punkt bringt (deutsche Seite).
    http://tutorial.schornboeck.net/static.htm

    Hoffe ich hab dir weitergeholfen 🙂

    // Oh ich seh gerade das ist ja die Seite die du grade offen hast 😮

    Also eine Statische Variable (wie der Text auf der Webseite sagt)
    wird nicht aufhören zu existieren sobald die Funktion durchgeführt wurde.



  • Zum Verständnis: eine als static deklarierte Variable in einer Funktion behält ihren Wert für einen nächsten Aufruf der Funktion. Das kann man für viele Zwecke gut gebrauchen. Alle nicht static deklarierten Variablen sind bei jedem Aufruf der Funktion neu.

    Das gezeigte Beispiel des Tutorials ist etwas verwirrend. Die Deklaration static int b = a ist geklammert, also nur innerhalb dieser Klammern sichtbar. Der Autor des Tutorials hat gleich mehrere Dinge zusammen gewürfelt, die zum Lernen nicht zusammen gehören. Es ist auch fraglich, ob jeder Compiler das gleich macht. Verlassen würde ich mich darauf jedenfalls nicht.

    Probiere an dem Beispiel mit kleineren Änderungen (static und/oder Klammern weglassen, Zuweisung b = a von der Deklaration trennen) herum und du lernst, was man damit alles machen kann. :p

    An den Autor des Tutorials: Ein Lernender sollte auch zum 'sauberen und übersichtlichem Programmieren' angehalten werden! 😃


Anmelden zum Antworten