WikiDer > Pointer (Programmierkonzept)

Pointer (programmeerconcept)
Zeiger ein zeigt auf die reguläre Variable b. ein enthält die Speicheradresse von b (1008 hexadezimal), b enthält die Zahl 17 (11 in hexadezimal).

EIN Zeiger ist in einem Programmiersprache ein Variable was als Wert a Speicheradresse enthält.

Der Wert eines Zeigers kann die Adresse einer Variablen (evtl. ein anderer Zeiger) sein, er kann aber auch auf eine beliebige andere Adresse zeigen, beispielsweise auf einen allokierten Speicher oder sogar auf eine Funktion.

Verfügbarkeit in Programmiersprachen

Viele traditionelle Programmiersprachen beispielsweise C haben umfangreiche Möglichkeiten, mit Zeigern zu arbeiten. Dies bietet große Flexibilität (z.B. im Vergleich zu einer Sprache wie Fortran 77 die nur sehr begrenzte Zeiger hat), aber auch das Arbeiten mit Zeigern und Berechnungen auf Zeigern in solchen Programmiersprachen macht es oft sehr schwer fehlerfreie Programme zu schreiben, die korrekt darauf achten, dass sie die Speicherplätze richtig reservieren und freigeben . Da ein Zeiger auf eine Speicheradresse zeigt, kann er auch durch unachtsame oder falsche Programmierung auf eine falsche Speicheradresse zeigen, wo das Programm nichts zu suchen hat und so andere Daten des Programms verändern oder (wenn kein Schutz dagegen besteht ) Daten anderer Programme oder sogar das laufende Betriebssystem beschädigen, was einen Neustart des gesamten Systems erzwingt. Von solchen Fehler sind oft schwer zu erkennen.

In moderneren objektorientiertenSkriptsprachen Zeiger werden auf diese Weise nicht mehr verwendet. Pointer werden zwar intern noch verwendet, aber da sie vom Programmierer abgeschirmt sind und die Programmiersprachen selbst dafür sorgen, dass die notwendigen Speicherplätze reserviert und freigegeben werden, ist die Programmierung komplexer Strukturen grundsätzlich einfacher.Es gibt zwei Techniken, die in solchen Programmiersprachen verwendet werden um ungenutzten Speicherplatz automatisch freizugeben:

  • indem Sie verfolgen, wie viele Verweise auf eine Variable vorhanden sind, und den Speicherplatz automatisch freigeben, wenn die Anzahl der Verweise null wird (Referenzzählung)
  • indem Sie regelmäßig den gesamten Speicher durchsuchen und den Platz für nicht mehr verwendete Variablen freigeben (Müll sammeln)

Beide Methoden haben ihre Vor- und Nachteile, daher werden sie manchmal kombiniert.

Griffe

Die häufige Verwendung von dynamische Speicherzuweisung kann zu einer Fragmentierung des verwendeten Speichers führen. Es ist sehr schwierig, dieses Problem zu lösen. Ein System, das von Apfel immer im Original Apple Macintosh mit 68000Prozessor wurde eingeführt, um die Speicherfragmentierung zu lösen, ist die Verwendung von Griffe: Zeiger auf Zeiger. Nur als Programm Griffe es kann eine Bibliothek verwendet werden, die den verwendeten Speicher bei Bedarf automatisch defragmentiert.

Verweise

In Sprachen wie perl oder Java Ein Großteil der Funktionalität von Zeigern kann durch die Verwendung von Referenzen verwendet werden (Verweise). Komplexe Datenstrukturen lassen sich auf einfache Weise erstellen, zum Beispiel mit a Array zu verwenden, die Verweise auf . enthält assoziative Arrays die wiederum Verweise auf noch andere enthalten Datenstrukturen. Der Programmierer muss nicht explizit Speicheradressen benutzen.

Die charakteristischen Unterschiede zwischen Referenzen und Zeigern sind:

  • Eine Referenz kann nur auf ein existierendes Objekt zeigen, ein Zeiger auf eine beliebige Speicheradresse.
  • Mit einem Zeiger können Berechnungen durchgeführt werden, um andere Adressen zu ermitteln (der Wert des Zeigers ist 2 mal die Länge des Datentyps int 1), mit einer Referenz nicht.

Mit anderen Worten: Ein Pointer bietet einen Einblick in das zugrunde liegende Speichermodell, eine Referenz erfolgt strikt innerhalb der Domäne der Programmiersprache. Ein Zeiger ist ein primitiveres Konzept, bei dem mehr möglich ist, bei dem jedoch mehr schief gehen kann.