Tablica wskaźników w C

Tablica wskaźników w C

W języku C tablica wskaźników jest jednorodnym zbiorem indeksowanych zmiennych wskaźnikowych, które są odniesieniami do lokalizacji w pamięci. Jest powszechnie używany w programowaniu C, gdy chcemy wskazać wiele lokalizacji pamięci o podobnym typie danych w naszym programie C. Dostęp do danych możemy uzyskać poprzez wyłuskanie wskaźnika wskazującego na nie.

Składnia:

pointer_type *array_name [array_size]; 

Tutaj,

    pointer_type: Typ danych, na które wskazuje wskaźnik. array_name: Nazwa tablicy wskaźników. array_size: Rozmiar tablicy wskaźników.

Notatka: Ważne jest, aby pamiętać o pierwszeństwie operatorów i skojarzeniu w tablicy deklaracji wskaźników różnego typu, ponieważ pojedyncza zmiana będzie oznaczać zupełnie co innego. Na przykład umieszczenie *nazwa_tablicy w nawiasie będzie oznaczać, że nazwa_tablicy jest wskaźnikiem do tablicy.

Przykład:

C




// C program to demonstrate the use of array of pointers> #include> int> main()> {> > // declaring some temp variables> > int> var1 = 10;> > int> var2 = 20;> > int> var3 = 30;> > // array of pointers to integers> > int> * ptr_arr[3] = { &var1, &var2, &var3 };> > // traversing using loop> > for> (> int> i = 0; i <3; i++) {> > printf> (> 'Value of var%d: %d Address: %p '> , i + 1, *ptr_arr[i], ptr_arr[i]);> > }> > return> 0;> }>

Wyjście

Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c 

Wyjaśnienie:

Jak pokazano w powyższym przykładzie, każdy element tablicy jest wskaźnikiem wskazującym na liczbę całkowitą. Dostęp do wartości tych liczb całkowitych możemy uzyskać, wybierając najpierw element tablicy, a następnie wyłuskując go, aby uzyskać wartość.

Tablica wskaźników do znaku

Jednym z głównych zastosowań tablicy wskaźników jest przechowywanie wielu ciągów znaków jako tablicy wskaźników do znaków. W tym przypadku każdy wskaźnik w tablicy jest wskaźnikiem znakowym wskazującym na pierwszy znak ciągu.

Składnia:

char *array_name [array_size]; 

Następnie do tych wskaźników możemy przypisać ciąg o dowolnej długości.

Przykład:

C




char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }>


Ta metoda przechowywania ciągów ma tę zaletę, że ma przewagę nad tradycyjną tablicą ciągów. Rozważ następujące dwa przykłady:

Przykład 1:

C




// C Program to print Array of strings without array of pointers> #include> int> main()> {> > char> str[3][10] = {> 'Geek'> ,> 'Geeks'> ,> 'Geekfor'> };> > printf> (> 'String array Elements are: '> );> > for> (> int> i = 0; i <3; i++) {> > printf> (> '%s '> , str[i]);> > }> > return> 0;> }>

Wyjście

String array Elements are: Geek Geeks Geekfor 

W powyższym programie zadeklarowaliśmy 3 wiersze i 10 kolumn naszej tablicy ciągów. Jednak ze względu na z góry określony rozmiar tablicy ciągów, zużycie miejsca przez program wzrasta, jeśli pamięć nie jest właściwie wykorzystywana lub pozostaje nieużywana. Spróbujmy teraz zapisać te same ciągi znaków w tablicy wskaźników.

Przykład 2:

C




// C program to illustrate the use of array of pointers to> // characters> #include> int> main()> {> > char> * arr[3] = {> 'geek'> ,> 'Geeks'> ,> 'Geeksfor'> };> > for> (> int> i = 0; i <3; i++) {> > printf> (> '%s '> , arr[i]);> > }> > return> 0;> }>

Wyjście

geek Geeks Geeksfor 

W tym przypadku całkowita używana pamięć to pamięć wymagana do przechowywania ciągów znaków i wskaźników bez pozostawiania pustej przestrzeni, co pozwala zaoszczędzić dużo zmarnowanego miejsca. Możemy to zrozumieć, korzystając z obrazu pokazanego poniżej.

reprezentacja-pamięci-tablicy-ciągów

Przestrzeń zajmowana przez tablicę wskaźników do znaków jest pokazana jako ciągłe zielone bloki, z wyłączeniem pamięci potrzebnej do przechowywania wskaźnika, podczas gdy przestrzeń zajmowana przez tablicę ciągów znaków obejmuje zarówno ciągłe, jak i jasnozielone bloki.

Tablica wskaźników do różnych typów

Nie tylko możemy zdefiniować tablicę wskaźników dla podstawowych typów danych, takich jak int, char, float itp., ale możemy również zdefiniować je dla pochodnych i zdefiniowanych przez użytkownika typów danych, takich jak tablice, struktury itp. Rozważmy poniższy przykład, w którym tworzymy tablicę wskaźników wskazujących na funkcję wykonującą różne operacje.

Przykład:

C




// C program to illustrate the use of array of pointers to> // function> #include> // some basic arithmetic operations> void> add(> int> a,> int> b) {> > printf> (> 'Sum : %d '> , a + b);> }> void> subtract(> int> a,> int> b) {> > printf> (> 'Difference : %d '> , a - b);> }> void> multiply(> int> a,> int> b) {> > printf> (> 'Product : %d '> , a * b);> }> void> divide(> int> a,> int> b) {> > printf> (> 'Quotient : %d'> , a / b);> }> int> main() {> > int> x = 50, y = 5;> > // array of pointers to function of return type int> > void> (*arr[4])(> int> ,> int> )> > = { &add, &subtract, &multiply, ÷ };> > for> (> int> i = 0; i <4; i++) {> > arr[i](x, y);> > }> > return> 0;> }>

Wyjście

Sum : 55 Difference : 45 Product : 250 Quotient : 10 

Zastosowanie tablicy wskaźników

Tablica wskaźników jest przydatna w wielu przypadkach. Niektóre z tych aplikacji są wymienione poniżej:

  • Najczęściej używany jest do przechowywania wielu ciągów znaków.
  • Jest również używany do implementacji LinkedHashMap w C, a także w technice Chaining do rozwiązywania kolizji w Hashing.
  • Jest używany w algorytmach sortowania, takich jak sortowanie kubełkowe.
  • Można go używać z dowolnym typem wskaźnika, więc jest przydatny, gdy mamy osobne deklaracje wielu encji i chcemy przechowywać je w jednym miejscu.

Wady tablicy wskaźników

Zestaw wskaźników ma również sporo wad i powinien być stosowany, gdy zalety przeważają nad wadami. Niektóre z wad tablicy wskaźników to:

    Wyższe zużycie pamięci: Tablica wskaźników wymaga więcej pamięci w porównaniu do zwykłych tablic ze względu na dodatkową przestrzeń wymaganą do przechowywania wskaźników. Złożoność: tablica wskaźników może być skomplikowana w użyciu w porównaniu z prostą tablicą. Podatny na błędy: gdy używamy wskaźników, towarzyszą im wszystkie błędy związane ze wskaźnikami, dlatego musimy się z nimi obchodzić ostrożnie.

Powiązany artykuł: Wskaźnik do tablicy | Wskaźnik tablicy