Warunek wstępny: Wskaźniki w C
Wskaźnik do wskaźnika w C jest używany, gdy chcemy przechowywać adres innego wskaźnika. Pierwszy wskaźnik służy do przechowywania adresu zmiennej. Drugi wskaźnik służy do przechowywania adresu pierwszego wskaźnika. Dlatego są również znane jako podwójne wskazówki . Możemy użyć wskaźnika do wskaźnika, aby zmienić wartości normalnych wskaźników lub utworzyć tablicę 2-D o zmiennej wielkości. Podwójny wskaźnik zajmuje tę samą ilość miejsca na stosie pamięci, co normalny wskaźnik.
Deklaracja wskaźnika na wskaźnik w C
Deklarowanie wskaźnika na wskaźnik jest podobne do deklarowania wskaźnika w C. Różnica polega na tym, że przed nazwą wskaźnika musimy umieścić dodatkowy znak „*”.
Madhubala
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.>
Powyższy diagram przedstawia reprezentację wskaźnika do wskaźnika w pamięci. Pierwszy wskaźnik ptr1 przechowuje adres zmiennej, a drugi wskaźnik ptr2 przechowuje adres pierwszego wskaźnika.
Przykład podwójnego wskaźnika w 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;> }> |
>
>Wyjście
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Jak działa podwójny wskaźnik?
witryny takie jak bedpage
Działanie podwójnego wskaźnika można wyjaśnić na powyższym obrazku:
- Podwójny wskaźnik jest deklarowany przy użyciu składni pokazanej powyżej.
- Następnie przechowujemy adres innego wskaźnika jako wartość tego nowego podwójnego wskaźnika.
- Teraz, jeśli chcemy manipulować lub odwoływać się do któregokolwiek z jego poziomów, musimy użyć operatora gwiazdki ( * ) tyle razy, ile razy chcemy przejść w dół poziomu.
Rozmiar wskaźnika do wskaźnika w C
W języku programowania C podwójny wskaźnik zachowuje się podobnie do normalnego wskaźnika w C. Zatem rozmiar zmiennej o podwójnym wskaźniku jest zawsze równy normalnym wskaźnikom. Możemy to zweryfikować za pomocą poniższego programu C.
Przykład 1: Program w C obliczający rozmiar wskaźnika do wskaźnika.
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;> }> |
>
>
słownik c#Wyjście
Size of normal Pointer: 8 Size of Double Pointer: 8>
Notatka: Wynik powyższego kodu zależy również od typu używanej maszyny. Rozmiar wskaźnika nie jest ustalony w języku programowania C i zależy od innych czynników, takich jak architektura procesora i używany system operacyjny. Zwykle w przypadku 64-bitowego systemu operacyjnego rozmiar będzie wynosić 8 bajtów, a w przypadku 32-bitowego systemu operacyjnego rozmiar będzie wynosić 4 bajty.
Zastosowanie podwójnych wskaźników w C
Poniżej przedstawiono główne zastosowania wskaźnika do wskaźników w C:
- Wykorzystuje się je do dynamicznej alokacji pamięci tablic wielowymiarowych.
- Można ich używać do przechowywania danych wielopoziomowych, takich jak akapit dokumentu tekstowego, zdania i semantyka słów.
- Są używane w strukturach danych do bezpośredniego manipulowania adresami węzłów bez kopiowania.
- Można ich używać jako argumentów funkcji do manipulowania adresem przechowywanym we wskaźniku lokalnym.
Wskaźniki wielopoziomowe w C
Podwójne wskaźniki nie są jedynymi wskaźnikami wielopoziomowymi obsługiwanymi przez język C. A co jeśli chcemy zmienić wartość podwójnego wskaźnika?
W tym przypadku możemy zastosować potrójny wskaźnik, który będzie wskaźnikiem do wskaźnika do wskaźnika, czyli int ***t_ptr.
Składnia potrójnego wskaźnika
pointer_type *** pointer_name;>
Podobnie, aby zmienić wartość potrójnego wskaźnika, możemy użyć wskaźnika do wskaźnika do wskaźnika do wskaźnika (wskaźnik czteropoziomowy). Innymi słowy, możemy powiedzieć, że do zmiany wartości zmiennej poziom – x możemy użyć wskaźnika poziomu – x+1. I tę koncepcję można rozszerzyć dalej.
Notatka : W C możemy używać dowolnego wskaźnika poziomu. Nie ma co do tego żadnych ograniczeń, ale sprawia to, że program jest bardzo złożony i podatny na błędy.
Musisz przeczytać - Wskaźnik funkcji w C