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