Nicht immer ist es erwünscht, daß der für lokale Variablen reservierte Speicherplatz wieder freigegeben wird. So würde die folgende Funktion immer wieder den Wert Eins ausgeben, wenn sie aufgerufen wird:
void zaehler() { int n = 1; cout << "Dies ist Aufruf Nummer " << n++; }
Auch eine Abfrage, um die Zuweisung zu verhindern hilft dabei nicht,
da n
jedesmal neuen Speicherplatz zugewiesen bekommt und
somit den alten Wert 'vergißt'. Abhilfe könnte eine
globale Variable schaffen, aber bei einer globalen Variable weiß
man zum einen nicht, ob der Name nicht anderweitig belegt ist und zum
anderen kann man nicht sicher sein, daß diese nicht von anderen
Programmteilen verändert wird.
Abhilfe schafft das Konzept der statischen Variablen. Eine statische Variable ist eine lokale Variable, die aber nur einmal Speicherplatz zugewiesen bekommt und diesen behält, solange die Funktion Gültigkeit behält, also i.d.R. solange das Programm läuft:
void zaehler() { static int n = 1; // Dies wird nur einmal ausgeführt, danach bleibt der Speicherplatz reserviert cout << "Dies ist Aufruf Nummer " << n++; // Hier wird dann mitgezählt }