logo

Statische Variablen in C

Statische Variablen haben die Eigenschaft, ihren Wert auch dann beizubehalten, wenn sie außerhalb ihres Gültigkeitsbereichs liegen! Daher behält eine statische Variable ihren vorherigen Wert in ihrem vorherigen Bereich bei und wird im neuen Bereich nicht erneut initialisiert.

Syntax:



  static   data_type   var_name   = var_value;>

Im Folgenden finden Sie einige interessante Fakten zu statischen Variablen in C:

bestes Lächeln der Welt

1) Eine statische int-Variable verbleibt im Speicher, während das Programm ausgeführt wird. Eine normale oder automatische Variable wird zerstört, wenn ein Funktionsaufruf beendet ist, bei dem die Variable deklariert wurde.
Beispielsweise können wir „static int“ verwenden, um zu zählen, wie oft eine Funktion aufgerufen wird, aber eine Auto-Variable kann für diesen Zweck nicht verwendet werden.

Beispiel



C






// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

>

>

Ausgabe

1 2>

Das obige Programm gibt 1 2 aus, da statische Variablen nur einmal initialisiert werden und bis zum Ende des Programms bestehen bleiben. Deshalb können sie ihren Wert auch zwischen mehreren Funktionsaufrufen behalten.

Versuchen wir den gleichen Code für die lokale Auto-Variable.

Beispiel

CSS erstes Kind

C




// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

>

>

Ausgabe

1 1>

2) Statischen Variablen wird Speicher im Datensegment zugewiesen, nicht im Stapelsegment. Siehe die Speicherlayout von C-Programmen für Details.

3) Statische Variablen (wie globale Variablen) werden mit 0 initialisiert, wenn sie nicht explizit initialisiert werden. Im folgenden Programm wird beispielsweise der Wert von x als 0 ausgegeben, während der Wert von y etwas Müll ist. Sehen Das für mehr Details.

Beispiel

C


j e s t



// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d %d'>, x, y);> }>

partielle Ableitung in Latex

>

>

Ausgabe

0  [some_garbage_value]>

4) In C können statische Variablen nur mit konstanten Literalen initialisiert werden. Das folgende Programm schlägt beispielsweise bei der Kompilierung fehl. Sehen Das für mehr Details.

Beispiel

C




String-Split Java

#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }>

>

>

Ausgabe

In function 'main': 9:5: error: initializer element is not constant  static int i = initializer();  ^>

Notiz: Bitte beachten Sie, dass diese Bedingung in C++ nicht gilt. Wenn Sie das Programm also als C++-Programm speichern, lässt es sich problemlos kompilieren und ausführen.

5) Auch statische globale Variablen und Funktionen sind in C/C++ möglich. Der Zweck besteht darin, den Gültigkeitsbereich einer Variablen oder Funktion auf eine Datei zu beschränken. Bitte beziehen Sie sich auf Statische Funktionen in C für mehr Details.

6) Statische Variablen sollten nicht innerhalb einer Struktur deklariert werden. Der Grund dafür ist, dass der C-Compiler erfordert, dass die gesamten Strukturelemente zusammen platziert werden (d. h. die Speicherzuweisung für Strukturelemente sollte zusammenhängend sein). Es ist möglich, eine Struktur innerhalb der Funktion zu deklarieren (Stack-Segment) oder Speicher dynamisch zuzuweisen (Heap-Segment) oder sogar global zu sein (BSS oder Datensegment). Was auch immer der Fall sein mag, alle Strukturelemente sollten sich im selben Speichersegment befinden, da der Wert für das Strukturelement durch Zählen des Offsets des Elements von der Anfangsadresse der Struktur abgerufen wird. Die Aufteilung eines einzigen Mitglieds auf ein Datensegment macht den Zweck der Struktur zunichte und es ist möglich, dass die gesamte Struktur statisch ist.

In Verbindung stehende Artikel:

  • Statisches Schlüsselwort in C++
  • Quiz zum statischen Schlüsselwort
  • Statische Datenelemente in C++
  • Wann werden statische Objekte zerstört?
  • Interessante Fakten über statische Memberfunktionen
  • Können statische Funktionen virtuell sein?
  • Vergleich statischer Schlüsselwörter in C++ und Java
  • Statische Funktionen in C