logo

C – ukazatel na ukazatel (dvojitý ukazatel)

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