Předpoklad: Ukazatele v C
Ukazatel na ukazatel v C se používá, když chceme uložit adresu jiného ukazatele. První ukazatel slouží k uložení adresy proměnné. A druhý ukazatel se používá k uložení adresy prvního ukazatele. Proto jsou také známé jako dvojité ukazatele . Můžeme použít ukazatel na ukazatel ke změně hodnot normálních ukazatelů nebo vytvořit 2D pole s proměnlivou velikostí. Dvojitý ukazatel zabírá stejné množství místa v zásobníku paměti jako normální ukazatel.
Deklarace ukazatele na ukazatel v C
Deklarování ukazatele na ukazatel je podobné jako deklarování ukazatele v C. Rozdíl je v tom, že před název ukazatele musíme umístit další 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.>
Výše uvedený diagram ukazuje paměťovou reprezentaci ukazatele na ukazatel. První ukazatel ptr1 ukládá adresu proměnné a druhý ukazatel ptr2 ukládá adresu prvního ukazatele.
Příklad dvojitého ukazatele 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ýstup
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Jak funguje dvojitý ukazatel?
Fungování dvojitého ukazatele lze vysvětlit pomocí obrázku výše:
- Dvojitý ukazatel je deklarován pomocí syntaxe uvedené výše.
- Poté uložíme adresu dalšího ukazatele jako hodnotu tohoto nového dvojitého ukazatele.
- Nyní, pokud chceme manipulovat nebo dereferencovat kteroukoli z jeho úrovní, musíme použít operátor Hvězdička ( * ), kolikrát se chceme dostat dolů na úroveň.
Velikost ukazatele na ukazatel v C
V programovacím jazyce C se dvojitý ukazatel chová podobně jako normální ukazatel v C. Velikost proměnné s dvojitým ukazatelem je tedy vždy rovna normálním ukazatelům. Můžeme to ověřit pomocí níže uvedeného programu C.
přirovnat k struně
Příklad 1: C Program pro zjištění velikosti ukazatele na ukazatel.
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;> }> |
>
>Výstup
Size of normal Pointer: 8 Size of Double Pointer: 8>
Poznámka: Výstup výše uvedeného kódu také závisí na typu používaného stroje. Velikost ukazatele není v programovacím jazyce C pevná a závisí na dalších faktorech, jako je architektura CPU a použitý OS. Obvykle bude pro 64bitový operační systém velikost 8 bajtů a pro 32bitový operační systém bude velikost 4 bajty.
Aplikace dvojitých ukazatelů v C
Níže jsou uvedena hlavní použití ukazatele na ukazatele v C:
budkový algoritmus
- Používají se při dynamické alokaci paměti vícerozměrných polí.
- Lze je použít k ukládání víceúrovňových dat, jako je odstavec textového dokumentu, věty a sémantika slova.
- Používají se v datových strukturách k přímé manipulaci s adresami uzlů bez kopírování.
- Mohou být použity jako argumenty funkce pro manipulaci s adresou uloženou v místním ukazateli.
Víceúrovňové ukazatele v C
Dvojité ukazatele nejsou jedinými víceúrovňovými ukazateli podporovanými jazykem C. Co když chceme změnit hodnotu dvojitého ukazatele?
V tomto případě můžeme použít trojitý ukazatel, což bude ukazatel na ukazatel na ukazatel, tj. int ***t_ptr.
Syntaxe trojitého ukazatele
pointer_type *** pointer_name;>
Podobně pro změnu hodnoty trojitého ukazatele můžeme použít ukazatel na ukazatel na ukazatel na ukazatel (čtyřúrovňový ukazatel). Jinými slovy, můžeme říci, že ke změně hodnoty proměnné úroveň – x můžeme použít ukazatel úroveň – x+1. A tento koncept lze dále rozšířit.
Poznámka : Můžeme použít jakýkoli ukazatel úrovně v C. Neexistují žádná omezení, ale program je díky tomu velmi složitý a náchylný k chybám.
Musíš číst - Funkční ukazatel v C