Speicherklassen in C: Auto, Extern, Static, Register (Beispiele)
⚡ Intelligente Zusammenfassung
Speicherklassen in C definieren den Gültigkeitsbereich, die Lebensdauer, den Standardwert und den Speicherort jeder Variablen mithilfe von vier Spezifizierern – auto, register, static und extern –, um zu steuern, wo Daten gespeichert werden und wie lange sie während der Ausführung erhalten bleiben.
Was ist die Speicherklasse in C?
Eine Speicherklasse stellt die Sichtbarkeit und den Speicherort einer Variable dar. Sie gibt an, von welchem Teil des Codes aus wir auf eine Variable zugreifen können. Eine Speicherklasse in C wird verwendet, um die folgenden Dinge zu beschreiben:
- Der Variablenbereich.
- Der Speicherort, an dem die Variable gespeichert wird.
- Der initialisierte Wert einer Variablen.
- Eine Lebensdauer einer Variablen.
- Wer kann auf eine Variable zugreifen?
Daher wird eine Speicherklasse verwendet, um die Informationen über eine Variable darzustellen.
HINWEIS: Eine Variable ist nicht nur mit einem verknüpft Datentyp, sein Wert ist aber auch eine Speicherklasse.
Welche Arten von Speicherklassen gibt es in C?
Es gibt insgesamt vier Arten von Standardspeicherklassen. Die folgende Tabelle stellt die Speicherklassen in C dar.
| Lagerklasse | Zweck |
| Auto | Es handelt sich um eine Standardspeicherklasse. |
| extern | Es handelt sich um eine globale Variable. |
| statisch | Es handelt sich um eine lokale Variable, die auch dann einen Wert zurückgeben kann, wenn die Kontrolle an den Funktionsaufruf übergeben wird. |
| Registrieren | Es handelt sich um eine Variable, die in einem Register gespeichert wird. |
Auto Storage-Klasse in C
Die mithilfe der Auto-Storage-Klasse definierten Variablen werden als lokale Variablen bezeichnet. Auto steht für automatische Speicherklasse. Eine Variable gehört standardmäßig zur automatischen Speicherklasse, wenn sie nicht explizit angegeben wird.
Der Gültigkeitsbereich einer Auto-Variable ist auf den jeweiligen Block beschränkt. Sobald die Steuerung den Block verlässt, wird der Zugriff zerstört. Das bedeutet, dass nur der Block, in dem die Auto-Variable deklariert ist, darauf zugreifen kann.
Ein Schlüsselwort auto wird verwendet, um eine automatische Speicherklasse zu definieren. Standardmäßig enthält eine Auto-Variable einen Müllwert.
Example, auto int age;
Das folgende Programm definiert eine Funktion mit zwei lokalen Variablen
int add(void) { int a=13; auto int b=48; return a+b;}
Wir nehmen ein anderes Programm, das die Scope-Ebene „Sichtbarkeitsebene“ für Auto-Variablen in jedem Blockcode anzeigt, die unabhängig voneinander sind:
#include <stdio.h> int main( ) { auto int j = 1; { auto int j= 2; { auto int j = 3; printf ( " %d ", j); } printf ( "\t %d ",j); } printf( "%d\n", j);}
Ausgang:
3 2 1
Externe Speicherklasse in C
Extern steht für externe Speicherklasse. Die externe Speicherklasse wird verwendet, wenn wir globale Funktionen oder Variablen haben, die von zwei oder mehr Dateien gemeinsam genutzt werden.
Das Schlüsselwort extern wird verwendet, um eine globale Variable oder Funktion in einer anderen Datei zu deklarieren und so eine Referenz auf eine Variable oder Funktion bereitzustellen, die bereits in der Originaldatei definiert wurde.
Die mit einem externen Schlüsselwort definierten Variablen werden als globale Variablen bezeichnet. Auf diese Variablen kann im gesamten Programm zugegriffen werden. Beachten Sie, dass die externe Variable nicht initialisiert werden kann, da sie bereits in der Originaldatei definiert wurde.
Example, extern void display();
Erste Datei: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Zweite Datei: original.c
#include <stdio.h>
i=48;
Ergebnis:
value of the external integer is = 48
Um den obigen Code zu kompilieren und auszuführen, führen Sie die folgenden Schritte aus
Schritt 1) Neues Projekt erstellen,
- Wählen Sie Konsolenanwendung
- Klicken Sie auf Los
Schritt 2) Wählen Sie C und klicken Sie auf Weiter
Schritt 3) Klicken Sie auf Weiter
Schritt 4) Geben Sie Ihre Daten ein und klicken Sie auf Weiter
Schritt 5) Klicken Sie auf Fertigstellen.
Schritt 6) Fügen Sie den Hauptcode, wie im vorherigen Programm gezeigt, in die Datei main.c ein und speichern Sie sie.
Schritt 7) Erstellen Sie eine neue C-Datei [Datei -> Neu -> Leere Datei ], speichern Sie sie (als original.c) und fügen Sie sie dem aktuellen Projekt hinzu, indem Sie im Dialogfeld auf „OK“ klicken.
Schritt 8) Speichern Sie den im vorherigen Beispiel gezeigten C-Code der Originaldatei original.c ohne die main()-Funktion.
Schritt 9) Erstellen und führen Sie Ihr Projekt aus. Das Ergebnis wird in der nächsten Abbildung dargestellt.
Statische Speicherklasse in C
Die statischen Variablen werden innerhalb der Funktion/Datei als lokale statische Variablen verwendet. Sie können auch als verwendet werden Globale Variable
- Eine statische lokale Variable ist eine lokale Variable, die ihren Wert zwischen Funktionsaufrufen oder Blöcken beibehält und speichert und nur für die Funktion oder den Block sichtbar bleibt, in der sie definiert ist.
- Statische globale Variablen sind globale Variablen, die nur in der Datei sichtbar sind, in der sie deklariert sind.
Example: static int count = 10;
Beachten Sie, dass die statische Variable einen Standardanfangswert von Null hat und nur einmal in ihrer Lebensdauer initialisiert wird.
#include <stdio.h> /* function declaration */ void next(void); static int counter = 7; /* global variable */ main() { while(counter<10) { next(); counter++; } return 0;} void next( void ) { /* function definition */ static int iteration = 13; /* local static variable */ iteration ++; printf("iteration=%d and counter= %d\n", iteration, counter);}
Ergebnis:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Auf globale Variablen kann in der gesamten Datei zugegriffen werden, während auf statische Variablen nur für den jeweiligen Teil eines Codes zugegriffen werden kann.
Die Lebensdauer einer statischen Variablen liegt im gesamten Programmcode. Eine Variable, die mit dem Schlüsselwort static deklariert oder initialisiert wird, enthält immer Null als Standardwert.
Registrieren Sie die Speicherklasse in C
Sie können die Registerspeicherklasse verwenden, wenn Sie lokale Variablen innerhalb von Funktionen oder Blöcken stattdessen in CPU-Registern speichern möchten RAM um schnellen Zugriff auf diese Variablen zu haben. Beispielsweise sind „Zähler“ ein guter Kandidat für die Speicherung im Register.
Example: register int age;
Das Schlüsselwort `register` dient zur Deklaration einer Registerspeicherklasse. Variablen, die mit dieser Registerspeicherklasse deklariert werden, behalten ihre Lebensdauer während des gesamten Programms.
Es ähnelt der Auto-Storage-Klasse. Die Variable ist auf den jeweiligen Block beschränkt. Der einzige Unterschied besteht darin, dass die mithilfe der Registerspeicherklasse deklarierten Variablen in CPU-Registern und nicht in einem Speicher gespeichert werden. Auf das Register kann schneller zugegriffen werden als auf den Hauptspeicher.
Die mithilfe der Registerspeicherklasse deklarierten Variablen haben keinen Standardwert. Diese Variablen werden häufig zu Beginn eines Programms deklariert.
#include <stdio.h> /* function declaration */ main() { {register int weight; int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/} }
Ausgang:
error: address of register variable 'weight' requested
Die folgende Tabelle fasst die wichtigsten Merkmale jeder Speicherklasse zusammen, die häufig in der C-Programmierung verwendet werden.
| Speicherklasse | Erklärung | Lagerung | Standardanfangswert | Geltungsbereich | Lebenslang |
| Auto | Innerhalb einer Funktion/Block | Memory | Unberechenbar | Innerhalb der Funktion/des Blocks | Innerhalb der Funktion/des Blocks |
| Registrieren | Innerhalb einer Funktion/Block | CPU-Register | Müll | Innerhalb der Funktion/des Blocks | Innerhalb der Funktion/des Blocks |
| extern | Außerhalb aller Funktionen | Memory | Null | Vervollständigen Sie die Datei und andere Dateien, in denen die Variable als extern deklariert ist | Programmlaufzeit |
| Statisch (lokal) | Innerhalb einer Funktion/Block | Memory | Null | Innerhalb der Funktion/des Blocks | Programmlaufzeit |
| Statisch (global) | Außerhalb aller Funktionen | Memory | Null | Globalen | Programmlaufzeit |









