Variablendeklaration, Speicherbelegung und Speicherfreigabe
Im C ist ein Zeiger nicht einfach nur ein Zeiger, sondern man sagt dem Compiler auch immer,
auf was für eine Information ein bestimmter Zeiger zeigt, also wie das,
worauf der Zeiger zeigt, behandelt werden soll.
Schließlich können in einem Stück Speicher gebrochene Zahlen,
ganze Zahlen, Texte und Strukturen stehen.
Ein Stück Speicher ist also nicht einfach ein Stück Speicher.
Die Variablendefinition sieht folgendermaßen aus:
Typ *Variable_1, *Variable_2, *Variable_3, ..., *Variable_n;
Beispiele:
double *Alfa,*Beta,*Gamma;
int *i,*j;
char *s;
In diesen Beispielen werden Alfa, Beta und Gamma als Zeiger
auf gebrochene Zahlen definiert
und i und j sind Zeiger auf ganze Zahlen.
Die Variable s wurde als Zeiger auf eine Zeichenkette deklariert.
Zwar kann man auch untypisierte Zeiger definieren (void *Variable_1,...;),
das soll uns hier aber nicht weiter interessieren.
Nun sind die Zeiger zwar definiert,
aber zum Zeitpunkt nach der Definition gehört zu keinem der Zeiger
ein Stück Speicher.
Die Zeiger zeigen also in die Leere.
Will man mit den Variablen arbeiten,
muß man ihnen ein Stück Speicher zuordnen.
Dies erfolgt so:
Zeigervariable = new Typ;
oder
Zeigervariabe = malloc(Speicherbedarf);
Beispiele:
Alfa = new double;
i = new int;
s = (char *)malloc(30);
In diesen Beispielen wird von dem Befehl new ein Stück Speicher belegt,
in dem ein Double Platz findet und Alfa
auf die Adresse dieses Speicherbereiches gesetzt
sowie Speicher für einen Integer bestellt
und i auf dessen Adresse gesetzt.
Desweiteren wird durch malloc ein 30 bytes langer Speicherbereich
belegt und s auf diesen Bereich gesetzt.
Dieser Vorgang ist in etwa mit dem Belegen eines Garderobenhakens
an einer Theatergarderobe vergleichbar.
Sie belegen mit dem Befehl new einen Garderobenhaken,
die Zeigervariable nimmt dabei die Rolle der Westentasche ein,
in die Sie die Garderobenmarke mit der Hakennummer stecken.
Der Mantel hängt am Haken, Sie bekommen lediglich den Zeiger auf den Haken,
an dem er hängt.
Kommen Sie aus dem Theater, geben Sie die Garderobenmarke ab und nehmen den Mantel wieder mit,
damit der Haken wieder frei ist für andere Mäntel von anderen Leuten.
Genauso wird ein Zeiger, wenn man ihn nicht mehr braucht, wieder abgegeben,
damit der Speicher für andere Zwecke frei wird.
Das sieht so aus:
für mit new belegte Speicherbereiche:
delete Zeigervariable;
für mit malloc allozierte Bereiche:
free(s);
Beispiele:
delete Alfa;
delete i;
free(s);
Für die Verwendung der Funktionen malloc und free braucht man die
Einbindung der Bibliothek malloc.h.
Autor: Ulrich Kritzner