Speicherklassen in C: Auto, Extern, Static, Register (Beispiele)

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.

Anmerkungen: Eine Variable ist nicht nur mit a 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 Sinn
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);}

AUSGABE:

 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.

Stichwort (Keyword) extern wird zum Deklarieren einer globalen Variablen oder Funktion in einer anderen Datei verwendet, um den Verweis auf Variablen oder Funktionen bereitzustellen, die bereits in der Originaldatei definiert wurden.

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,

  1. Wählen Sie Konsolenanwendung
  2. Klicken Sie auf Los

Externe Speicherklasse in C

Schritt 2) Wählen Sie C und klicken Sie auf Weiter

Externe Speicherklasse in C

Schritt 3) Klicken Sie auf Weiter

Externe Speicherklasse in C

Schritt 4) Geben Sie die Details ein und klicken Sie auf „Weiter“

Externe Speicherklasse in C

Schritt 5) Klicken Sie auf Fertig stellen

Externe Speicherklasse in C

Schritt 6) Fügen Sie den Hauptcode wie im vorherigen Programm gezeigt in die Datei main.c ein und speichern Sie ihn

Externe Speicherklasse in C

Schritt 7) Erstellen Sie eine neue C-Datei [Datei -> Neu -> Leere Datei], speichern Sie (als original.c) und fügen Sie sie dem aktuellen Projekt hinzu, indem Sie im Dialogfeld auf „OK“ klicken.

Externe Speicherklasse in C

Schritt 8) Fügen Sie den C-Code der im vorherigen Beispiel gezeigten Datei original.c ohne die Funktion main() ein und speichern Sie ihn.

Externe Speicherklasse in C

Schritt 9) Erstellen Sie Ihr Projekt und führen Sie es aus. Das Ergebnis ist in der nächsten Abbildung dargestellt

Externe Speicherklasse in C

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 sichtbare globale Variablen nur für die Datei, in der es deklariert ist.
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 Registrieren wird verwendet, um eine Registerspeicherklasse zu deklarieren. Die mithilfe der Registerspeicherklasse deklarierten Variablen haben eine Lebensdauer im gesamten Programm.

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*/}
}

AUSGABE:

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 Global Programmlaufzeit

Zusammenfassung

In diesem Tutorial haben wir Speicherklassen in C besprochen, um es zusammenzufassen:

  • Eine Speicherklasse in C wird verwendet, um zusätzliche Informationen über eine Variable darzustellen.
  • Die Speicherklasse repräsentiert den Umfang und die Lebensdauer einer Variablen.
  • Außerdem erfahren Sie, wer von wo aus auf eine Variable zugreifen kann.
  • Auto, Extern, Register, Static sind die vier verschiedenen Speicherklassen in einem C-Programm.
  • Ein Speicherklassenspezifizierer in C Sprache wird zum Definieren von Variablen, Funktionen und Parametern verwendet.
  • auto wird für eine lokale Variable verwendet, die innerhalb eines Blocks oder einer Funktion definiert ist
  • Register wird zum Speichern der Variablen in CPU-Registern und nicht im Speicherbereich für den schnellen Zugriff verwendet.
  • Statisch wird sowohl für globale als auch für lokale Variablen verwendet. Jeder hat seinen Anwendungsfall innerhalb eines C-Programms.
  • Extern wird für den Datenaustausch zwischen C-Projektdateien verwendet.