static

In diesem Artikel geht es um das Attribut static in Verbindung mit Variablendeklarationen. Es geht hier nicht um das Schlüsselwort static in Verbindung mit Funktionsdeklarationen, denn dort hat es eine abweichende Bedeutung.

Wirkung von static

Das Schlüsselwort static bewirkt, dass einer Variable innerhalb einer Funktion eine feste Speicheradresse zugewiesen wird. Das heißt diese Variable zeigt bei jedem Aufruf der Funktion auf ein und die selbe Stelle im Speicher.
Daraus ergibt sich für uns die Möglichkeit, diese Variable wie ein Gedächtnis zu nutzen.

Demonstartion an einem Beispiel

Um das Ganze etwas verständlicher zu machen, versuchen wir uns das an einem einfachen Beispiel zu erklären.

Nehmen wir an wir wollen einen Zähler realisieren. Dies geht mir Hilfe einer static Variablen folgendermaßen:

int inc_counter()
{
    static int count_var = 0; //Wir initialisieren diese Variable beim ersten Aufruf der Funktion auf 0
    count_var++;
    return count_var;
}

Wird diese Funktion zum ersten Mal aufgerufen, so wird Speicher für eine int-Variable an einer Speicherstelle reserviert. Der Wert dieser Speicherstelle wird auf 0 gesetzt. Anschließend wird der Wert um eins auf 1 erhöht. Dieser Wert wird nun zurückgegeben.

Wäre die Variable nicht als static deklariert, so würde beim nächsten Aufruf der Funktion exakt die gleiche Prozedur ablaufen.

Da die Variable aber als static deklariert ist, wird ihr bei einem erneuten Funktionsaufruf nicht erneut irgendeine Speicherstelle zugewiesen, sondern die schon zugewiesene Stelle verwendet. Als Startwert wird diesemal nicht 0 genommen, sondern der Wert, der sich an der Stelle im Speicher befindet. Also der Wert, den die Variable beim letzten Funktionsaufruf zuletzt hatte. Staticvariablen werden also nur einmal mit dem Wert, den man im Code einträgt, initialisiert.


Autorendiskussion