C – kazalec na kazalec (dvojni kazalec)

Predpogoj: Kazalci v C

Kazalec na kazalec v C se uporablja, ko želimo shraniti naslov drugega kazalca. Prvi kazalec se uporablja za shranjevanje naslova spremenljivke. In drugi kazalec se uporablja za shranjevanje naslova prvega kazalca. Zato so znani tudi kot dvojne točke . Kazalec na kazalec lahko uporabimo za spreminjanje vrednosti običajnih kazalcev ali ustvarjanje 2-D polja spremenljive velikosti. Dvojni kazalec zavzame enako količino prostora v pomnilniškem skladu kot običajni kazalec.

Deklaracija kazalca na kazalec v C

Deklaracija kazalca na kazalec je podobna deklaraciji kazalca v C. Razlika je v tem, da moramo pred ime kazalca postaviti dodaten '*'.

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. 

Zgornji diagram prikazuje spominsko predstavitev kazalca na kazalec. Prvi kazalec ptr1 shrani naslov spremenljivke, drugi kazalec ptr2 pa naslov prvega kazalca.

Primer dvojnega kazalca v 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;> }>

Izhod

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

Kako deluje dvojni kazalec?

Delovanje dvojnega kazalca je mogoče pojasniti z zgornjo sliko:

  • Dvojni kazalec je deklariran z zgoraj prikazano sintakso.
  • Po tem shranimo naslov drugega kazalca kot vrednost tega novega dvojnega kazalca.
  • Zdaj, če želimo manipulirati ali dereferencirati katero koli od njegovih ravni, moramo uporabiti operator zvezdice ( * ), kolikokrat nižje od ravni, ki jo želimo iti.

Velikost kazalca na kazalec v C

V programskem jeziku C se dvojni kazalec obnaša podobno kot običajni kazalec v C. Torej je velikost spremenljivke dvojnega kazalca vedno enaka običajnim kazalcem. To lahko preverimo s spodnjim programom C.

Primer 1: Program C za iskanje velikosti kazalca na kazalec.

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

Izhod

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

Opomba: Izhod zgornje kode je odvisen tudi od vrste stroja, ki se uporablja. Velikost kazalca v programskem jeziku C ni fiksna in je odvisna od drugih dejavnikov, kot sta arhitektura procesorja in uporabljeni OS. Običajno je za 64-bitni operacijski sistem velikost 8 bajtov, za 32-bitni operacijski sistem pa 4 bajte.

Uporaba dvojnih kazalcev v C

Sledijo glavne uporabe kazalca na kazalec v C:

  • Uporabljajo se pri dinamičnem dodeljevanju pomnilnika večdimenzionalnih nizov.
  • Uporabljajo se lahko za shranjevanje večnivojskih podatkov, kot so odstavek besedilnega dokumenta, stavki in semantika besed.
  • Uporabljajo se v podatkovnih strukturah za neposredno manipulacijo naslovov vozlišč brez kopiranja.
  • Uporabljajo se lahko kot funkcijski argumenti za manipulacijo naslova, shranjenega v lokalnem kazalcu.

Večnivojski kazalci v C

Dvojni kazalci niso edini večnivojski kazalci, ki jih podpira jezik C. Kaj pa, če želimo spremeniti vrednost dvojnega kazalca?

V tem primeru lahko uporabimo trojni kazalec, ki bo kazalec na kazalec na kazalec, tj. int ***t_ptr.

Sintaksa trojnega kazalca

  pointer_type *** pointer_name; 

Podobno lahko za spreminjanje vrednosti trojnega kazalca uporabimo kazalec na kazalec na kazalec na kazalec (Kazalec štirih ravni). Z drugimi besedami, lahko rečemo, da lahko za spremembo vrednosti spremenljivke nivo – x uporabimo kazalec nivo – x+1. In ta koncept je mogoče še razširiti.

Opomba : V C lahko uporabimo kateri koli kazalec ravni. Glede tega ni nobenih omejitev, vendar je zaradi tega program zelo zapleten in ranljiv za napake.

Morati prebrati - Kazalec funkcije v C