C – žymeklis į žymeklį (dvigubas žymeklis)

Būtina sąlyga: Rodyklės C

Žymiklis į žymeklį C yra naudojamas, kai norime išsaugoti kito žymeklio adresą. Pirmasis rodyklė naudojamas kintamojo adresui išsaugoti. O antroji rodyklė naudojama pirmos žymeklio adresui išsaugoti. Štai kodėl jie taip pat žinomi kaip dvitaškiai . Galime naudoti žymeklį, kad pakeistume įprastų rodyklių reikšmes arba sukurtume kintamo dydžio 2-D masyvą. Dvigubas žymeklis užima tiek pat vietos atminties krūvoje kaip ir įprastas žymeklis.

Rodyklės į rodyklę deklaracija C

Rodyklės paskelbimas žymekliu yra panašus į žymeklio deklaravimą C. Skirtumas yra tas, kad prieš žymeklio pavadinimą turime įdėti papildomą „*“.

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. 

Aukščiau pateiktoje diagramoje parodytas žymeklio atmintyje atvaizdas žymeklyje. Pirmasis rodyklė ptr1 saugo kintamojo adresą, o antrasis rodyklė ptr2 saugo pirmosios žymeklio adresą.

Dvigubo žymeklio pavyzdys 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;> }>

Išvestis

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

Kaip veikia dvigubas žymeklis?

Dvigubo žymeklio veikimą galima paaiškinti naudojant aukščiau pateiktą paveikslėlį:

  • Dvigubas žymeklis deklaruojamas naudojant aukščiau pateiktą sintaksę.
  • Po to išsaugome kito rodyklės adresą kaip šio naujo dvigubo žymeklio reikšmę.
  • Dabar, jei norime manipuliuoti ar nukrypti nuo bet kurio iš jo lygių, turime naudoti Asterisk ( * ) operatorių tiek kartų, kiek norime pasiekti lygį.

Žymeklio dydis C

C programavimo kalboje dvigubas žymeklis elgiasi panašiai kaip įprastas žymeklis C. Taigi dvigubo žymeklio kintamojo dydis visada yra lygus įprastoms rodyklėms. Tai galime patikrinti naudodami toliau pateiktą C programą.

1 pavyzdys: C Programa, skirta rasti žymeklio dydį.

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

Išvestis

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

Pastaba: Pirmiau nurodyto kodo išvestis taip pat priklauso nuo naudojamos mašinos tipo. Rodyklės dydis nėra fiksuotas C programavimo kalba ir priklauso nuo kitų veiksnių, pvz., CPU architektūros ir naudojamos OS. Paprastai 64 bitų operacinės sistemos dydis bus 8 baitai, o 32 bitų operacinei sistemai - 4 baitai.

Dvigubo rodyklių taikymas C

Toliau pateikiami pagrindiniai rodyklės į žymeklius C programoje naudojimo būdai:

  • Jie naudojami dinaminiam daugiamačių masyvų atminties paskirstymui.
  • Jie gali būti naudojami daugiapakopiams duomenims, pvz., tekstinio dokumento pastraipai, sakiniams ir žodžių semantikai, saugoti.
  • Jie naudojami duomenų struktūrose, kad būtų galima tiesiogiai manipuliuoti mazgų adresais nekopijuojant.
  • Jie gali būti naudojami kaip funkcijos argumentai manipuliuoti adresu, saugomu vietinėje žymeklyje.

Daugiapakopiai rodyklės C

Dvigubi rodyklės nėra vienintelės kelių lygių rodyklės, kurias palaiko C kalba. Ką daryti, jei norime pakeisti dvigubo žymeklio reikšmę?

Šiuo atveju galime naudoti trigubą žymeklį, kuris bus žymeklis į rodyklę, ty int ***t_ptr.

Trigubo žymeklio sintaksė

  pointer_type *** pointer_name; 

Panašiai, norėdami pakeisti trigubo žymeklio reikšmę, galime naudoti rodyklę į rodyklę, nukreiptą į žymeklį (keturių lygių rodyklė). Kitaip tariant, galime pasakyti, kad norėdami pakeisti lygio reikšmę – x kintamasis, galime naudoti lygį – x+1 rodyklę. Ir šią koncepciją galima išplėsti.

Pastaba : Mes galime naudoti bet kokį C lygio žymeklį. Jai nėra jokių apribojimų, tačiau programa tampa labai sudėtinga ir pažeidžiama klaidų.

Privaloma perskaityti - Funkcijų rodyklė C