Video

Du bist bereits ein Profi in der Anwendung von Zeigern, hast aber keine Ahnung, wie deren Erweiterung funktioniert? In diesem Beitrag zeigen wir es dir, denn es geht um die Doppelzeiger!

Inhaltsübersicht

Doppelzeiger: Zeiger mit mehreren Ebenen

Als erstes sollten wir einmal klären, was Doppelzeiger überhaupt sind. Du kannst dir diese vorstellen wie einen Zeiger, der auf einen Zeiger zeigt. Das heißt, wir haben praktisch einen Zeiger mit mehreren Ebenen.

Doppelzeiger
direkt ins Video springen
Doppelzeiger sind Zeiger mit mehreren Ebenen

Umwandlung von Einfachzeigern in Funktionen

Sehen wir uns das einmal im Arbeitsspeicher an, so sieht das in etwa so aus: Wir haben unseren „normalen“ Pointer p auf der ersten Ebene. Dieser ist an einer beliebigen Stelle im Arbeitsspeicher abgelegt und zeigt auf unsere zweite Ebene. Diese liegt an einer anderen, ebenfalls beliebigen Stelle im Arbeitsspeicher und zeigt auf die dritte und letzte Ebene, die aus Dateneinträgen besteht.

Doppelzeiger
direkt ins Video springen
Erste, zweite und dritte Ebene im Arbeitsspeicher

Nun fragst du dich bestimmt, was du damit überhaupt anfangen kannst? Du kannst damit Einfachzeiger in Funktionen umbiegen. Das braucht man zum Beispiel zum dynamischen Einlesen einer Zeichenfolge, wo es für die Übergabe der Adresse eines Zeigers auf eben diese Zahlenfolge verwendet wird. Konkret heißt das, dass in der Funktion, in die wir die Zeichenkette übergeben, selbst ein Doppelzeiger zur Manipulation dieser Zeichenkette verwendet wird.

Doppelzeiger
direkt ins Video springen
Call-by-Reference Prinzip

Diese Art der Anwendung für Doppelzeiger basiert darauf, dass der Zeiger auf den neu reservierten Speicherbereich mittels Dereferenzierung umgebogen wird. Das Prinzip dahinter nennt man Call-By-Reference.

Anwendung in der dynamischen Matrizenrechnung

Das Ganze kann aber auch für die dynamische Matrizenrechnung verwendet werden. Konkret sieht das dann im Speicher so aus:

Doppelzeiger
direkt ins Video springen
Doppelzeiger in der dynamischen Matrizenrechnung

Auf Ebene eins haben wir wieder unseren Pointer p, der auf unsere zweite Ebene zeigt, in der unsere Zeilen liegen. Die tatsächlichen Einträge dieser Zeilen bzw. unsere Spalten liegen auf der dritten Ebene. Wenn wir das Ganze also ausgeben, erhalten wir etwas in dieser Form:

Doppelzeiger
direkt ins Video springen
Ausgabe der Einträge

Das liegt daran, dass unser Pointer zunächst auf einen anderen Pointer verweist und dieser dann die entsprechenden Werte aufruft. Aber bevor du dich in ein Codebeispiel stürzt, solltest du noch wissen, wie man einen Doppelzeiger im Allgemeinen deklariert, damit du auch eine Chance hast, einen solchen im Quellcode zu identifizieren.

Deklarierung von Doppelzeigern

Willst du zum Beispiel einen Doppelzeiger vom Typ int deklarieren, kannst du das mit int **p tun. Die doppelten Sterne stehen für die Tatsache, dass es sich hier um einen Doppelzeiger handelt. Des weiteren kannst du ihn so wie er jetzt ist bereits wie ein Array benutzen oder gar für eine der vorher bereits erwähnten Möglichkeiten verwenden.

Doppelzeiger
direkt ins Video springen
Deklarierung eines Doppelzeigers vom Typ int

Außerdem solltest du noch wissen, dass Teile von Doppelzeigern immer dynamisch reserviert werden, was bedeutet, dass sie auch wieder freigegeben werden müssen. Tust du das nicht, kann es genauso wie bei Arrays und Variablen, die auf diese Weise reserviert wurden, zu Programmfehlern kommen.

Jetzt weißt du was Doppelzeiger sind, wie man sie in Funktionen umwandelt und wie du sie deklarieren kannst. Viel Erfolg beim Lernen!

Hallo, leider nutzt du einen AdBlocker.

Auf Studyflix bieten wir dir kostenlos hochwertige Bildung an. Dies können wir nur durch die Unterstützung unserer Werbepartner tun.

Schalte bitte deinen Adblocker für Studyflix aus oder füge uns zu deinen Ausnahmen hinzu. Das tut dir nicht weh und hilft uns weiter.

Danke!
Dein Studyflix-Team

Wenn du nicht weißt, wie du deinen Adblocker deaktivierst oder Studyflix zu den Ausnahmen hinzufügst, findest du hier eine kurze Anleitung. Bitte .