Inhaltsverzeichnis
statisch modifizierte lokale Variablen
Statisch modifizierte globale Variablen
statisch modifizierte lokale Variablen
Statisch modifizierte lokale Variablen können auch als statische lokale Variablen bezeichnet werden
Um Statik einzuführen, analysieren wir zunächst die laufenden Ergebnisse des folgenden Codes:
#include<stdio.h>
void test()
{
int a = 5;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
Es gibt eine Testfunktion im Code, und in der Testfunktion ist eine lokale Variable a definiert. Bei jedem Aufruf der Testfunktion wird a ein Leerzeichen im Speicher zugewiesen, der Anfangswert von a ist 5 und dann a wird um 1 erhöht. Wenn der Testfunktionsaufruf endet, wird die Variable a zerstört und der Speicherplatz für a wird beim nächsten Aufruf der Testfunktion neu zugewiesen. Und die Testfunktion wird insgesamt 10 Mal aufgerufen, sodass 10 6s auf dem Bildschirm erscheinen
Was passiert, wenn Sie das Schlüsselwort static vor a hinzufügen? Ist die Antwort immer noch 10 6s?
#include<stdio.h>
void test()
{
static int a = 5;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
Wir haben festgestellt, dass sich das Ergebnis dieses Erscheinungsbildes von dem oben genannten unterscheidet: a scheint einen additiven Effekt zu haben
Das folgende Analyseprinzip:
Teilen Sie den Speicher beim Erlernen von C/C++-Code grob in drei Bereiche ein: Stapelbereich, statischer Bereich und Heap-Bereich
Die durch static geänderte Variable ist eine statische Variable. Aus der obigen Abbildung wissen wir bereits, dass die im statischen Bereich erstellte Variable erst am Ende des Programms zerstört wird, sodass die Variable a bei jedem Ende der Testfunktion nicht zerstört wird . Jedes Mal, wenn die Testfunktion aufgerufen wird, ist der Wert von a der Wert am Ende des vorherigen Aufrufs.
Daraus ist ersichtlich, dass bei der Änderung einer lokalen Variablen durch Statik eine lokale Variable ursprünglich im Stapelbereich vorhanden ist und bei der Änderung durch Statik im statischen Bereich vorhanden ist. Der Zeitraum wird länger, der Umfang bleibt jedoch erhalten Dasselbe.
Der Unterschied zwischen statisch modifizierten lokalen Variablen und globalen Variablen: Statisch modifizierte lokale Variablen können nur im lokalen Bereich verwendet werden.
Statisch modifizierte globale Variablen
Statisch modifizierte globale Variablen können auch als statische globale Variablen bezeichnet werden
Wenn wir mehrere Dateien unter einem Projekt erstellen, wie unten gezeigt
An diesem Punkt kann das Programm normal ausgeführt werden:
Wenn wir jedoch die globale Variable g_val mit static ändern, meldet das Programm einen Fehler:
Der Grund, warum der Fehler auftritt, ist das Hinzufügen von statischer Aufladung.
Statisch ändert die globale Variable und ändert das Link-Attribut der globalen Variablen von einem externen Link-Attribut in ein internes Link-Attribut. Diese statische Variable kann nur innerhalb der Quelldatei verwendet werden, in der sie sich befindet, und kann nicht in anderen Quelldateien verwendet werden. (Es fühlt sich an, als ob der Umfang kleiner wird)
statische Modifikatorfunktion
Statisch modifizierte Funktionen werden auch als statische Funktionen bezeichnet
Das Folgende ist ein Projekt, das zwei Dateien erstellt hat, die Datei add.c und die Datei test2.c
Zu diesem Zeitpunkt wird das kompilierte Programm normal ausgeführt
Wenn wir Add jedoch mit static ändern, tritt im Programm ein Fehler auf, und die Fehlermeldung ist dieselbe wie bei der statischen Änderung der globalen Variablen:
Die statische Änderungsfunktion ist dieselbe wie die globale statische Änderungsvariable
Die Funktion selbst verfügt über ein externes Linkattribut, wird jedoch zu einem internen Linkattribut, wenn sie durch Static geändert wird, sodass diese Funktion nur innerhalb der Quelldatei verwendet werden kann, in der sie sich befindet, und nicht innerhalb anderer Dateien.
Zusammenfassen
statisch modifizierte lokale Variablen
Die statische Änderung lokaler Variablen ändert den Lebenszyklus von Variablen, sodass statische lokale Variablen weiterhin außerhalb des Gültigkeitsbereichs vorhanden sind und der Lebenszyklus endet, wenn das Programm endet.
Statisch modifizierte globale Variablen
Eine globale Variable wird durch Static geändert, sodass diese globale Variable nur in dieser Quelldatei und nicht in anderen Quelldateien verwendet werden kann.
statische Modifikatorfunktion
Eine Funktion wird statisch geändert, sodass diese Funktion nur in dieser Quelldatei und nicht in anderen Quelldateien verwendet werden kann.