In C bedeutet "static", dass die Variable einen lokalen Geltungsbereich innerhalb des globalen Speichers hat.
Der Geltungsbereich von Variablen in C ist ein Block. Mit anderen Worten: Variablen können innerhalb des Blocks, in dem sie deklariert wurden, verwendet werden. Und normalerweise behalten sie ihre Werte nur bis zum Ende des Blocks und gehen danach verloren. Beispiel:
{
int a;
// Only a can be used here
{
int b;
// a and b can be used here
{
int c;
// a,b and c can be used here
}
//just a and b can be used here. c is not available anymore
}
// only a can be used here. Neither b nor c are available anymore
}
Dies gilt jedoch nicht für globale Variablen, die im gesamten Programm verwendet werden können.
Die andere Ausnahme ist die statische Variable. Sie wird nur innerhalb des Blocks gesehen, behält aber ihren Wert, nachdem der Block vorbei ist.
Wenn Sie also eine statische Variable innerhalb einer Funktion deklarieren, behält sie ihren Wert zwischen den Funktionsaufrufen bei.
Die folgende Funktion hat zum Beispiel eine lokale Variable. Lokale Variablen haben den Geltungsbereich eines Blocks (das bedeutet, dass Sie nur innerhalb des Blocks {}, in dem sie deklariert ist, auf die Variable 'var' zugreifen können, in diesem Fall also innerhalb der Funktion):
void countFunction(void)
{
int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Wenn die Variable nicht statisch ist, wird bei jedem Funktionsaufruf "Wert ist 1" ausgegeben, da die Variable auf dem Stack gespeichert ist, der beim Funktionsaufruf zugewiesen und nach der Rückkehr der Funktion wieder freigegeben wird.
Wenn Sie var so ändern, dass es statisch ist,
void countFunction(void)
{
static int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Beim ersten Aufruf der Funktion wird var mit 0 initialisiert und die Funktion zeigt "Wert ist 1" an. Beim zweiten Mal wird var jedoch bereits zugewiesen und befindet sich in einem globalen Bereich. Er wird nicht mehr initialisiert und die Funktion zeigt "Wert ist 2" an.
Dies im Rahmen der Programmausführung.
Obwohl eine statische Variable so lange zugewiesen wird, wie Ihr Programm ausgeführt wird, behält sie ihren Wert nicht, wenn Ihr Programm beendet ist (das Programm gibt seinen gesamten Speicher frei). Die einzige Möglichkeit, einen Wert für den nächsten Durchlauf zu erhalten, besteht darin, ihn auf einem nichtflüchtigen Medium wie der Festplatte zu speichern.
Ich hoffe, es hilft.