Speicherklassen in C: Verschiedene Arten von Speicherklassen [mit Beispielen]

Veröffentlicht: 2020-10-21

Das Codieren mit C konzentriert sich stark auf die Verwendung von Variablen in jedem Programm. Das sind die wichtigsten Aspekte der C-Programmierung. Jede Variable in C hat zwei Eigenschaften; Typ- und Speicherklassen. Unter ihnen bezieht sich der Typ auf den Datentyp der Variablen, und Speicherklassen in C bestimmen den Umfang, die Lebensdauer und die Sichtbarkeit der Variablen. Speicherklassen in C werden verwendet, um die Lebensdauer, Sichtbarkeit, den Speicherort und den Anfangswert einer Variablen zu ermitteln.

In diesem Blogbeitrag werden wir uns die Speicherklassen in C , ihre Typen und wie ihre Eigenschaften die Ausgabe des Programms beeinflussen, anhand einiger Programmierbeispiele detailliert ansehen. Eine Speicherklasse in C wird verwendet, um die Informationen einer Variablen darzustellen.

Erfahren Sie, wie Sie Anwendungen wie Swiggy, Quora, IMDB und mehr erstellen

Inhaltsverzeichnis

Was sind Speicherklassen in C?

Speicherklassen in C weisen den Speicherbereich einer Variablen zu, die im Speicher gehalten wird. Sie werden im RAM eines Systems gespeichert. Neben dem Speicherplatz bestimmen sie den Geltungsbereich einer Variablen. Variablen im C-Programm werden an einem physischen Ort im Zufallsspeicher gespeichert, der hauptsächlich aus dem Speicher und den CPU-Registern des Geräts besteht.

Speicherklassen in C definieren auch die Lebensdauer der Variablen und bezeichnen sie als „lokal“ oder „global“. Speicherklassen sind auch nützlich, um den Bereich oder die Sichtbarkeit und den Anfangswert der Variablen zu definieren. Es gibt hauptsächlich vier Speicherklassen in C , nämlich. automatisch , registrieren , statisch und extern . Wir werden jeden nach dem anderen weiter besprechen.

Wie werden Speicherklassen in C deklariert?

Die vier Speicherklassen in C werden in einem Block oder Programm mit den Speicherklassenbezeichnern auto, register, extern, static deklariert. Es gibt einen weiteren Speicherklassenbezeichner, 'typedef', der in der syntaktischen Form verwendet wird und keinen Speicher reserviert. Die Spezifizierer weisen den Compiler an, die Variablen zu speichern. Die externe Speicherklasse in C teilt dem Compiler mit, dass die definierte Variable mit externer Verknüpfung deklariert ist.

Es gibt einen wesentlichen Unterschied zwischen dem Definieren und Deklarieren einer Variablen. Bei der Definition einer Variablen geht es darum, den Speicher für die Variable zuzuweisen, und bei der Deklaration wird sie mit einem Wert initialisiert.

Syntax:

storage_class_specifier data_type variable_name;

Lesen Sie: Interessante Projektideen und -themen in C# für Anfänger

Sonderfall: Wenn in einem Programm kein Speicherklassenbezeichner deklariert oder definiert ist

In der Variablendeklaration ist mindestens ein Speicherklassenbezeichner angegeben. Falls jedoch kein Speicherklassenbezeichner angegeben ist, werden die folgenden Regeln befolgt:

1. Innerhalb einer Funktion deklarierte Variablen werden als automatisch betrachtet.

2. Innerhalb einer Funktion deklarierte Funktionen werden als extern betrachtet.

3. Außerhalb einer Funktion deklarierte Variablen und Funktionen werden als statisch betrachtet, mit externer Verknüpfung .

Welche Arten von Speicherklassen gibt es in C?

Es gibt vier Speicherklassen in C , schauen wir sie uns an:

1. Automatische Speicherklassen in C

Jede in einer Funktion oder einem Block definierte Variable gehört standardmäßig zur automatischen Speicherklasse, wenn keine Speicherklasse erwähnt wird. Die Variablen einer Funktion oder eines Blocks, die zur automatischen Speicherklasse gehören, werden mit dem Auto-Spezifizierer deklariert. Variablen unter auto in C sind lokal für den Block, in dem sie definiert sind, und werden außerhalb des Blocks verworfen.

Ein einfaches Programm, das automatische Speicherklassen zeigt:

#include <stdio.h>

int Haupt()

{

auto int i = 11;

{

autoint i = 22;

{

auto int i = 33;

printf ("%d", i);

}

printf ("%d", i);

}

printf ("%d", i);

}

Die Ausgabe des Programms:

3 2 1

Erläuterung:

Im obigen Programm wird dreimal die Variable i deklariert. Variablen mit gleichem Namen können in verschiedenen Blöcken definiert werden. Daher wird dieses Programm fehlerfrei kompiliert und erfolgreich ausgeführt. Die Funktion 'printf' im innersten Block gibt 3 aus und die Variable i in diesem Block wird zerstört, nachdem der Block endet.

Der nächste, der zweite äußere Block, druckt 2, dem dann der äußere Block folgt, der 1 druckt. Die automatischen Variablen werden richtig initialisiert; Andernfalls erhalten Sie undefinierte Werte, da der Compiler ihnen keinen Anfangswert gibt.

2. Speicherklassen in C registrieren

Die Variablen, die zu einer Registerspeicherklasse gehören, sind äquivalent zu auto in C , werden aber in CPU-Registern und nicht im Speicher gespeichert, daher der Name. Auf sie wird häufig zugegriffen. Der Registerbezeichner wird verwendet, um die Variable der Registerspeicherklasse zu deklarieren. Variablen einer Registerspeicherklasse sind lokal für den Block, wo sie definiert und zerstört werden, wenn der Block endet.

Ein einfaches Programm, das Registerspeicherklassen zeigt:

#include <stdio.h>

int Haupt()

{

registrieren int i = 10;

int *p = &i; //Fehler: Adresse der angeforderten Registervariable

printf („Wert von i: %d“, *p);

printf („Adresse von i: %u“, p);

}

Erläuterung:

Im obigen Programm versucht der Code, die Adresse der Variablen i in die Zeigervariable p zu bekommen, aber da i als Registervariable deklariert ist, wird der Code nicht kompiliert und zeigt den Fehler „Fehler: Adresse der angeforderten Registervariablen“ an. .

Nur bestimmte Arten von Variablen werden in Registern abgelegt. Registervariablen wird vom Compiler kein Initialwert gegeben.

Lernen: C++ Vs Java: Unterschied zwischen C++ und Java

3. Statische Speicherklassen in C

Die Sichtbarkeit statischer Variablen ist außerhalb ihrer Funktion oder Datei null, aber ihre Werte werden zwischen Aufrufen beibehalten. Die Variablen mit statischer Speicherklasse werden mit dem statischen Bezeichner deklariert. Statische Variablen befinden sich innerhalb einer Funktion oder Datei. Der statische Bezeichner funktioniert bei lokalen und globalen Variablen unterschiedlich.

Einfache Programme, die statische Speicherklassen mit lokalen und globalen Variablen anzeigen:

ich. Lokale Variable

#include <stdio.h>

void staticDemo()

{

statisch int i;

{

statisch int i = 1;

printf („%d“, i);

i++;

}

printf („%d“, i);

i++;

}

int Haupt()

{

staticDemo();

staticDemo();

}

Die Ausgabe des Programms:

1 0

2 1

Erläuterung:

Wenn eine lokale Variable durch einen statischen Bezeichner innerhalb einer Funktion oder eines Blocks definiert wird, wird im Compiler permanenter Speicherplatz erstellt. Die statische lokale Variable ist für die Funktion oder den Block sichtbar, wo sie angegeben ist, und behält ihren Wert zwischen den Funktionsaufrufen. Im obigen Programm wird die statische Variable i an zwei Stellen in zwei Blöcken innerhalb der Funktion staticDemo() definiert. staticDemo() wird in der Hauptfunktion zwei genannt. Beim nächsten Aufruf behalten die statischen Variablen ihre alten Werte und müssen nicht neu initialisiert werden.

ii. Globale Variable

#include <stdio.h>

statisch int gInt = 1;

statisch void staticDemo()

{

statisch int i;

printf („%d“, i);

i++;

printf („%d“, globalInt);

globalInt++;

}

int Haupt()

{

staticDemo();

staticDemo();

}

Die Ausgabe des Programms:

0 1

1 2

Erläuterung:

Statische Variablen müssen nur einmal in einem Programm initialisiert werden und bleiben während der gesamten Lebensdauer erhalten. Sie haben einen standardmäßigen Anfangswert von Null.

Wenn eine globale Variable oder Funktion durch einen statischen Bezeichner definiert wird, ist diese Variable oder Funktion nur der Datei bekannt, in der sie definiert ist. Bei einer globalen Variablen können andere Dateiroutinen nicht auf ihren Inhalt zugreifen und ihn ändern, da eine statische globale Variable eine interne Verknüpfung hat. Im obigen Programm sind die statische globale Variable globalInt und eine statische Funktion staticDemo() als statisch definiert und können außerhalb der C-Datei nicht verwendet werden.

4. Externe Speicherklassen in C

Externe Speicherklassenvariablen oder -funktionen werden durch den 'extern'-Spezifizierer deklariert. Wenn eine Variable mit einem externen Bezeichner deklariert wird, wird der Variablen kein Speicherplatz zugewiesen und es wird davon ausgegangen, dass sie bereits an anderer Stelle im Programm definiert wurde. Bei einem externen Bezeichner wird die Variable nicht initialisiert. Der Grund, warum extern verwendet wird, um eine Variable in einem Programm anzugeben, um sie mit externer Verknüpfung zu deklarieren.

Ein einfaches Programm, das externe Speicherklassen zeigt:

#include <stdio.h>

extern int ich;

int Haupt()

{

printf ("i: %d", i);

}

int i = 1;

Erläuterung:

Wenn im obigen C-Programm extern int i entfernt wird, wird der Fehler „Nicht deklarierter Bezeichner 'i' angezeigt, weil die Variable i definiert wird, nachdem sie in printf verwendet wurde. Der extern-Spezifizierer weist den Compiler an, dass die Variable i definiert wurde und hier deklariert wird.

Wenn Sie extern int i ändern; nach extern int i = 5; Sie erhalten einen Fehler „Neudefinition von 'i'“, da der Extern-Spezifizierer keine Variable initialisiert.

Lesen Sie auch: Top 7 aufregende Projektideen in C für Anfänger

Letzte Worte

Dieser Artikel beschreibt das Konzept der Speicherklassen in C und erklärt Ihnen, wie sich ihre Typen voneinander unterscheiden. Wann Sie eine bestimmte Speicherklasse verwenden, hängt von der Zuweisung und dem Umfang, der Lebensdauer und der Sichtbarkeit der Variablen ab, mit denen Sie es zu tun haben.

Wenn Sie daran interessiert sind, mehr zu erfahren und Mentoring von Branchenexperten benötigen, sehen Sie sich das PG-Diplom in Full-Stack-Softwareentwicklung von upGrad & IIIT Banglore an.

Bereiten Sie sich auf eine Karriere der Zukunft vor

UPGRAD UND IIIT-BANGALORES PG-DIPLOM IN FULL-STACK-SOFTWAREENTWICKLUNG
Melden Sie sich noch heute an