Predpoklad: Ukazovatele v C
Ukazovateľ na ukazovateľ v C sa používa, keď chceme uložiť adresu iného ukazovateľa. Prvý ukazovateľ slúži na uloženie adresy premennej. A druhý ukazovateľ sa používa na uloženie adresy prvého ukazovateľa. Preto sú známe aj ako dvojité ukazovatele . Ukazovateľ na ukazovateľ môžeme použiť na zmenu hodnôt normálnych ukazovateľov alebo na vytvorenie 2-D poľa s premenlivou veľkosťou. Dvojitý ukazovateľ zaberá rovnaké množstvo miesta v zásobníku pamäte ako normálny ukazovateľ.
Deklarácia ukazovateľa na ukazovateľ v C
Deklarovanie ukazovateľa na ukazovateľ je podobné ako deklarovanie ukazovateľa v jazyku C. Rozdiel je v tom, že pred názov ukazovateľa musíme umiestniť ďalší znak „*“.
govinda
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.>
Vyššie uvedený diagram ukazuje pamäťovú reprezentáciu ukazovateľa na ukazovateľ. Prvý ukazovateľ ptr1 ukladá adresu premennej a druhý ukazovateľ ptr2 ukladá adresu prvého ukazovateľa.
Príklad dvojitého ukazovateľa 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;> }> |
>
>Výkon
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Ako funguje dvojitý ukazovateľ?
Fungovanie dvojitého ukazovateľa možno vysvetliť pomocou vyššie uvedeného obrázka:
- Dvojitý ukazovateľ je deklarovaný pomocou syntaxe uvedenej vyššie.
- Potom uložíme adresu ďalšieho ukazovateľa ako hodnotu tohto nového dvojitého ukazovateľa.
- Teraz, ak chceme manipulovať alebo dereferencovať niektorú z jej úrovní, musíme použiť operátor hviezdička ( * ), koľkokrát nižšie úroveň, o ktorú chceme ísť.
Veľkosť ukazovateľa na ukazovateľ v C
V programovacom jazyku C sa dvojitý ukazovateľ správa podobne ako normálny ukazovateľ v C. Veľkosť premennej s dvojitým ukazovateľom sa teda vždy rovná normálnym ukazovateľom. Môžeme to overiť pomocou nižšie uvedeného programu C.
Príklad 1: C Program na zistenie veľkosti ukazovateľa na ukazovateľ.
C
np priemer
// 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;> }> |
>
>
inurl:.git/headVýkon
Size of normal Pointer: 8 Size of Double Pointer: 8>
Poznámka: Výstup vyššie uvedeného kódu závisí aj od typu stroja, ktorý sa používa. Veľkosť ukazovateľa nie je v programovacom jazyku C pevná a závisí od iných faktorov, ako je architektúra CPU a použitý OS. Pre 64-bitový operačný systém bude veľkosť zvyčajne 8 bajtov a pre 32-bitový operačný systém bude veľkosť 4 bajty.
Aplikácia dvojitých ukazovateľov v C
Nižšie sú uvedené hlavné použitia ukazovateľa na ukazovatele v jazyku C:
- Používajú sa pri dynamickom prideľovaní pamäte viacrozmerných polí.
- Môžu sa použiť na ukladanie viacúrovňových údajov, ako je odsek textového dokumentu, vety a sémantika slov.
- Používajú sa v dátových štruktúrach na priamu manipuláciu s adresami uzlov bez kopírovania.
- Môžu byť použité ako funkčné argumenty na manipuláciu s adresou uloženou v lokálnom ukazovateli.
Viacúrovňové ukazovatele v C
Dvojité ukazovatele nie sú jediné viacúrovňové ukazovatele podporované jazykom C. Čo ak chceme zmeniť hodnotu dvojitého ukazovateľa?
V tomto prípade môžeme použiť trojitý ukazovateľ, ktorý bude ukazovateľom na ukazovateľ na ukazovateľ, tj int ***t_ptr.
Syntax trojitého ukazovateľa
pointer_type *** pointer_name;>
Podobne na zmenu hodnoty trojitého ukazovateľa môžeme použiť ukazovateľ na ukazovateľ na ukazovateľ na ukazovateľ (štyriúrovňový ukazovateľ). Inými slovami, môžeme povedať, že na zmenu hodnoty premennej úroveň – x môžeme použiť ukazovateľ úroveň – x+1. A tento koncept možno ďalej rozširovať.
Poznámka : Môžeme použiť akýkoľvek ukazovateľ úrovne v C. Neexistujú žiadne obmedzenia, ale program je veľmi zložitý a náchylný na chyby.
Musíte prečítať - Ukazovateľ funkcie v C