Pamięć w programie jest podzielona na dwie części: statyczne i dynamiczne. Pamięć statyczna odnosi się do zmiennych o ustalonym rozmiarze w trakcie programu, podczas gdy pamięć dynamiczna dostosowuje się do wielkości zmiennych, których potrzebuje program. Na przykład, jeśli program musi przechowywać zmienną liczbę ciągów, zastosowana zostanie pamięć dynamiczna. W języku C, podwójne wskaźniki (**) są używane podczas pracy z pamięcią dynamiczną.
Co to jest podwójny wskaźnik (**)?
A podwójny wskaźnik (**) jest wskaźnikiem, który wskazuje na lokalizację innego wskaźnika. Lokalizacja zmiennej w pamięci jest wskazana przez ten dodatkowy wskaźnik. W rezultacie, gdy podwójny wskaźnik (**) jest przypisany do zmiennej, tworzone są dwa poziomy adresu pamięci. Umożliwia to językowi C łatwiejszy dostęp do pamięci dynamicznej. Na stosie pamięci, a podwójny wskaźnik (**) zajmuje taką samą ilość miejsca jak zwykły wskaźnik.
Spójrzmy na składnię podwójny wskaźnik (**):
data_type_of_pointer ** name_of_variable = & normal_pointer_variable;
Teraz spójrzmy na przykład użycia podwójny wskaźnik (**) W programie C.
#włączać
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf („Wartość VAL to: %d \ n”, val);
printf („Wartość Val za pomocą pojedynczego wskaźnika to: %d \ n”, *ptr1);
printf („Wartość val za pomocą podwójnego wskaźnika to: %d \ n”, ** ptr2);
powrót 0;
Używamy zmiennej „val”Z wartością 36 w powyższym kodzie. Następnie wskazujemy wskaźnik (PTR1) w kierunku val, który jest skierowany w kierunku drugiego wskaźnika (PTR2) następnie. Ale wskaźniki nie zmieniają wartości ''val', który pozostaje 36.
Wyjście
Podwójne wskaźniki (**) w języku programowania C zachowuje się identycznie jak zwykłe wskaźniki w C. W rezultacie podwójny wskaźnik (**) Rozmiar zmiennej i rozmiar zmiennej zwykłej wskaźnika są zawsze identyczne.
#włączać
int main ()
int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf („Rozmiar normalnego wskaźnika: %d \ n”, sizeof (ptr1));
printf („Rozmiar podwójnego wskaźnika: %d \ n”, sizeof (ptr2));
powrót 0;
Używamy zmiennej „val”Z wartością 36 w tym kodzie. Następnie wskazujemy wskaźnik (PTR1) w kierunku val, który jest skierowany w kierunku drugiego wskaźnika (PTR2) następnie. Obliczany jest rozmiar obu wskaźników, czyli identyczny, I.mi. 8.
Wyjście
Co robi ** w języku c?
Istnieje kilka funkcji podwójne wskaźniki które są tutaj wspomniane:
1: Dostęp do pamięci dynamicznej
Cecha podwójne wskaźniki (**) To, co umożliwia konfigurację i dostęp do pamięci dynamicznej. Aby to zrobić, wskaźnik otrzymuje adres, który pasuje do pierwszego elementu tablicy. podwójny wskaźnik (**) Następnie wskazuje na ten wskaźnik, umożliwiając odczyt lub pisanie danych w tej lokalizacji. W miarę działania programu do tablicy można dodać więcej elementów za pomocą podwójny wskaźnik (**).
2: Zdefiniuj tablicę wskaźnika
Kolejne zastosowanie dla podwójne wskaźniki (**) jest zdefiniowanie szeregu wskaźników. Jest to przydatne, gdy program musi uzyskać dostęp do dużych ilości danych bez obawy o rozmiar tablicy. A podwójny wskaźnik (**) może szybko uzyskać dostęp do adresu tych wskaźników, umożliwiając programowi przetwarzanie danych bez problemu rozmiaru tablicy za każdym razem, gdy wartość jest zmieniana.
3: Dostęp do lokalizacji adresu pamięci
Na najbardziej podstawowym poziomie, podwójny wskaźnik (**) po prostu daje programistę dostępu do adresu danej lokalizacji pamięci. Dzięki temu adresowi programista może następnie uzyskać dostęp do dowolnych danych przechowywanych w tej lokalizacji lub zmodyfikować te dane zgodnie z wymaganiami. Aby to zrobić, programista po prostu dereferencje podwójny wskaźnik (**), co odbywa się przy użyciu znaku gwiazdki (*). Z powodu podwójny wskaźnik (**), Programista jest teraz w stanie uzyskać dostęp i zmieniać dane w sposób, który nie był wcześniej możliwy.
4: Twórz złożone struktury danych
Ponadto podwójny wskaźnik (**) można również użyć do tworzenia bardziej złożonych struktur danych, takich jak drzewa i wykresy. Węzły, które mogą wskazywać na jeden lub kilka dodatkowych węzłów i tworzyć bardziej wyrafinowaną strukturę na drzewach i wykresach. Aby stworzyć tak złożoną strukturę, programista musi ponownie zdefiniować podwójny wskaźnik (**) To wskazuje na węzły w strukturze danych. podwójny wskaźnik (**) umożliwia programistę dostępu i modyfikowania węzłów w strukturze w sposób, który nie byłby możliwy bez podwójny wskaźnik (**).
Wniosek
Podwójne wskaźniki (**) są potężną częścią języka C, umożliwiając programom pracę z dużymi ilościami danych i pamięci dynamicznej. Dostarczają adres danych dla łatwego dostępu i utrzymują dwa poziomy adresu w całym przekazaniu danych. Przy użyciu podwójne wskaźniki (**), Program języka C może szybko przetwarzać duże ilości danych bez konieczności rozmiaru tablicy za każdym razem.