logo

C – Peker til peker (dobbeltpeker)

Forutsetning: Pekere i C

Pekeren til en peker i C brukes når vi ønsker å lagre adressen til en annen peker. Den første pekeren brukes til å lagre adressen til variabelen. Og den andre pekeren brukes til å lagre adressen til den første pekeren. Det er derfor de også er kjent som dobbeltpekere . Vi kan bruke en peker til en peker for å endre verdiene til normale pekere eller lage en 2D-matrise med variabel størrelse. En dobbel peker opptar samme mengde plass i minnestabelen som en vanlig peker.

Erklæring om peker til en peker i C

Å erklære peker til peker ligner på å erklære en peker i C. Forskjellen er at vi må plassere en ekstra '*' foran navnet på pekeren.



konverter byte array til streng
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 ovenfor viser minnerepresentasjonen av en peker til en peker. Den første pekeren ptr1 lagrer adressen til variabelen og den andre pekeren ptr2 lagrer adressen til den første pekeren.

Eksempel på dobbelpeker 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;> }>

>

>

Produksjon

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

Hvordan fungerer Double Pointer?

Dobbelpekerens virkemåte kan forklares ved hjelp av bildet ovenfor:

  • Dobbeltpekeren er deklarert ved å bruke syntaksen vist ovenfor.
  • Etter det lagrer vi adressen til en annen peker som verdien til denne nye doble pekeren.
  • Nå, hvis vi ønsker å manipulere eller avvise til noen av nivåene, må vi bruke Asterisk ( * ) operator antall ganger ned nivået vi ønsker å gå.

Størrelse på peker til peker i C

I programmeringsspråket C oppfører en dobbel peker seg på samme måte som en normal peker i C. Så størrelsen på dobbeltpekervariabelen er alltid lik de normale pekerne. Vi kan bekrefte dette ved å bruke C-programmet nedenfor.

Eksempel 1: C Program for å finne størrelsen på en peker til en peker.

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

hva er struktur i datastruktur

>

>

hva er kataloginnsending
Produksjon

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

Merk: Utdataene til koden ovenfor avhenger også av typen maskin som brukes. Størrelsen på en peker er ikke fastsatt i programmeringsspråket C, og det avhenger av andre faktorer som CPU-arkitektur og OS som brukes. Vanligvis, for et 64-bits operativsystem, vil størrelsen være 8 byte og for et 32-bits operativsystem vil størrelsen være 4 byte.

Bruk av doble pekere i C

Følgende er hovedbruken av peker til pekere i C:

  • De brukes i dynamisk minneallokering av flerdimensjonale arrays.
  • De kan brukes til å lagre data på flere nivåer som tekstdokumentavsnittet, setninger og ordsemantikk.
  • De brukes i datastrukturer for å direkte manipulere adressen til nodene uten å kopiere.
  • De kan brukes som funksjonsargumenter for å manipulere adressen som er lagret i den lokale pekeren.

Pekere på flere nivåer i C

Doble pekere er ikke de eneste pekere på flere nivåer som støttes av C-språket. Hva om vi vil endre verdien av en dobbelpeker?

I dette tilfellet kan vi bruke en trippelpeker, som vil være en peker til en peker til en peker, dvs. int ***t_ptr.

Syntaks for Triple Pointer

  pointer_type *** pointer_name;>

Tilsvarende, for å endre verdien av en trippelpeker, kan vi bruke en peker til en peker til en peker til en peker (Fire level Pointer). Med andre ord kan vi si at for å endre verdien av en nivå – x-variabel kan vi bruke en nivå – x+1-peker. Og dette konseptet kan utvides ytterligere.

Merk : Vi kan bruke hvilken som helst nivåpeker i C. Det er ingen begrensning på det, men det gjør programmet veldig komplekst og sårbart for feil.

Må lese - Funksjonspeker i C