logo

C – Zeiger auf Zeiger (Doppelzeiger)

Voraussetzung: Zeiger in C

Der Zeiger auf einen Zeiger in C wird verwendet, wenn wir die Adresse eines anderen Zeigers speichern möchten. Der erste Zeiger wird zum Speichern der Adresse der Variablen verwendet. Und der zweite Zeiger wird verwendet, um die Adresse des ersten Zeigers zu speichern. Deshalb werden sie auch als bezeichnet Doppelzeiger . Wir können einen Zeiger auf einen Zeiger verwenden, um die Werte normaler Zeiger zu ändern oder ein 2D-Array variabler Größe zu erstellen. Ein Doppelzeiger belegt im Speicherstapel genauso viel Platz wie ein normaler Zeiger.



Deklaration eines Zeigers auf einen Zeiger in C

Die Deklaration von Pointer to Pointer ähnelt der Deklaration eines Zeigers in C. Der Unterschied besteht darin, dass wir vor dem Namen des Zeigers ein zusätzliches „*“ platzieren müssen.

Java-Nullprüfung
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared  // which is pointing to an integer.>

Das obige Diagramm zeigt die Speicherdarstellung eines Zeigers auf einen Zeiger. Der erste Zeiger ptr1 speichert die Adresse der Variablen und der zweite Zeiger ptr2 speichert die Adresse des ersten Zeigers.

Beispiel für einen Doppelzeiger in C

C








// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d '>, var);> >printf>(>'Value of var using single pointer = %d '>, *ptr2);> >printf>(>'Value of var using double pointer = %d '>, **ptr1);> >return> 0;> }>

>

>

Java-Karten
Ausgabe

Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>

Wie funktioniert Double Pointer?

Die Funktionsweise des Doppelzeigers lässt sich anhand des obigen Bildes erklären:

  • Der Doppelzeiger wird mit der oben gezeigten Syntax deklariert.
  • Danach speichern wir die Adresse eines anderen Zeigers als Wert dieses neuen Doppelzeigers.
  • Wenn wir nun eine ihrer Ebenen manipulieren oder dereferenzieren möchten, müssen wir den Asterisk-Operator ( * ) so oft verwenden, wie oft wir auf der gewünschten Ebene nach unten gehen möchten.

Größe von Zeiger auf Zeiger in C

In der Programmiersprache C verhält sich ein Doppelzeiger ähnlich wie ein normaler Zeiger in C. Daher ist die Größe der Doppelzeigervariablen immer gleich der Größe der normalen Zeiger. Wir können dies mit dem folgenden C-Programm überprüfen.

Beispiel 1: C-Programm zum Ermitteln der Größe eines Zeigers auf einen Zeiger.

C




// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d '>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d '>,>sizeof>(d_ptr));> >return> 0;> }>

stlc
>

>

Ausgabe

 Size of normal Pointer: 8 Size of Double Pointer: 8>

Notiz: Die Ausgabe des obigen Codes hängt auch vom Typ der verwendeten Maschine ab. Die Größe eines Zeigers ist in der Programmiersprache C nicht festgelegt und hängt von anderen Faktoren wie der CPU-Architektur und dem verwendeten Betriebssystem ab. Normalerweise beträgt die Größe für ein 64-Bit-Betriebssystem 8 Byte und für ein 32-Bit-Betriebssystem 4 Byte.

Anwendung von Doppelzeigern in C

Im Folgenden sind die Hauptverwendungen von Zeigern auf Zeiger in C aufgeführt:

  • Sie werden bei der dynamischen Speicherzuweisung mehrdimensionaler Arrays verwendet.
  • Sie können zum Speichern mehrstufiger Daten verwendet werden, z. B. des Textdokumentabsatzes, der Sätze und der Wortsemantik.
  • Sie werden in Datenstrukturen verwendet, um die Adresse der Knoten ohne Kopieren direkt zu manipulieren.
  • Sie können als Funktionsargumente verwendet werden, um die im lokalen Zeiger gespeicherte Adresse zu manipulieren.

Mehrebenenzeiger in C

Doppelzeiger sind nicht die einzigen mehrstufigen Zeiger, die von der C-Sprache unterstützt werden. Was ist, wenn wir den Wert eines Doppelzeigers ändern möchten?

In diesem Fall können wir einen Dreifachzeiger verwenden, der ein Zeiger auf einen Zeiger auf einen Zeiger ist, also int ***t_ptr.

Syntax von Triple Pointer

  pointer_type *** pointer_name;>

In ähnlicher Weise können wir zum Ändern des Werts eines Dreifachzeigers einen Zeiger auf einen Zeiger auf einen Zeiger auf einen Zeiger (Zeiger mit vier Ebenen) verwenden. Mit anderen Worten können wir sagen, dass wir zum Ändern des Werts einer Variablen der Ebene x + einen Zeiger der Ebene x + 1 verwenden können. Und dieses Konzept lässt sich noch weiter ausbauen.

Notiz : Wir können jeden Ebenenzeiger in C verwenden. Es gibt keine Einschränkung, aber es macht das Programm sehr komplex und anfällig für Fehler.

Muss lesen - Funktionszeiger in C