logo

C – Pekare till pekare (dubbelpekare)

Nödvändig förutsättning: Pekare i C

Pekaren till en pekare i C används när vi vill lagra adressen till en annan pekare. Den första pekaren används för att lagra variabelns adress. Och den andra pekaren används för att lagra adressen till den första pekaren. Det är därför de också är kända som dubbelpekare . Vi kan använda en pekare till en pekare för att ändra värdena för normala pekare eller skapa en 2D-array med variabel storlek. En dubbelpekare upptar samma mängd utrymme i minnesstacken som en vanlig pekare.



Deklaration av pekare till en pekare i C

Att deklarera pekare till pekare liknar att deklarera en pekare i C. Skillnaden är att vi måste placera ytterligare ett '*' före namnet på pekaren.

central css-knapp
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.>

Diagrammet ovan visar minnesrepresentationen av en pekare till en pekare. Den första pekaren ptr1 lagrar adressen för variabeln och den andra pekaren ptr2 lagrar adressen för den första pekaren.

Exempel på dubbelpekare i 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;> }>

>

>

Produktion

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

Hur fungerar Double Pointer?

Dubbelpekarens funktion kan förklaras med hjälp av bilden ovan:

  • Dubbelpekaren deklareras med hjälp av syntaxen som visas ovan.
  • Därefter lagrar vi adressen till en annan pekare som värdet på denna nya dubbelpekare.
  • Om vi ​​nu vill manipulera eller hänvisa till någon av dess nivåer, måste vi använda Asterisk ( * ) operator det antal gånger ner den nivå vi vill gå.

Storlek på Pointer to Pointer i C

I programmeringsspråket C beter sig en dubbelpekare på samma sätt som en normal pekare i C. Så storleken på dubbelpekarvariabeln är alltid lika med de normala pekarna. Vi kan verifiera detta med C-programmet nedan.

Exempel 1: C Program för att hitta storleken på en pekare till en pekare.

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;> }>

edith mack hirsch

>

>

char tostring java
Produktion

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

Notera: Utmatningen av ovanstående kod beror också på vilken typ av maskin som används. Storleken på en pekare är inte fixerad i programmeringsspråket C och det beror på andra faktorer som CPU-arkitektur och OS som används. Vanligtvis för ett 64-bitars operativsystem är storleken 8 byte och för ett 32-bitars operativsystem är storleken 4 byte.

Tillämpning av dubbla pekare i C

Följande är de huvudsakliga användningsområdena för pekare till pekare i C:

  • De används i den dynamiska minnesallokeringen av flerdimensionella arrayer.
  • De kan användas för att lagra flernivådata som textdokumentets stycke, meningar och ordsemantik.
  • De används i datastrukturer för att direkt manipulera nodernas adress utan att kopiera.
  • De kan användas som funktionsargument för att manipulera adressen som är lagrad i den lokala pekaren.

Flernivåpekare i C

Dubbelpekare är inte de enda flernivåpekare som stöds av C-språket. Vad händer om vi vill ändra värdet på en dubbelpekare?

I det här fallet kan vi använda en trippelpekare, som kommer att vara en pekare till en pekare till en pekare, dvs int ***t_ptr.

Syntax för Triple Pointer

  pointer_type *** pointer_name;>

På liknande sätt kan vi för att ändra värdet på en trippelpekare använda en pekare till en pekare till en pekare till en pekare (fyranivåpekare). Med andra ord kan vi säga att för att ändra värdet på en nivå – x-variabel kan vi använda en nivå – x+1-pekare. Och detta koncept kan utvidgas ytterligare.

Notera : Vi kan använda vilken nivåpekare som helst i C. Det finns inga begränsningar för det men det gör programmet mycket komplext och sårbart för fel.

Måste läsas - Funktionspekare i C