Związek między tablicami i wskaźnikami w programowaniu w języku C (z przykładami)

W tym samouczku dowiesz się o relacjach między tablicami i wskaźnikami w programowaniu w C. Dowiesz się również, jak uzyskać dostęp do elementów tablicy za pomocą wskaźników.

Zanim nauczysz się związku między tablicami i wskaźnikami, zapoznaj się z tymi dwoma tematami:

  • C Arrays
  • Wskaźniki C.

Relacja między tablicami i wskaźnikami

Tablica to blok danych sekwencyjnych. Napiszmy program do drukowania adresów elementów tablicy.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Wynik

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adres tablicy x: 1450734448 

Między dwoma kolejnymi elementami tablicy x występuje różnica 4 bajtów. Dzieje się tak, ponieważ rozmiar intwynosi 4 bajty (w naszym kompilatorze).

Zwróć uwagę, że adres & x (0) i x jest taki sam. Dzieje się tak, ponieważ nazwa zmiennej x wskazuje na pierwszy element tablicy.

Z powyższego przykładu jasno wynika, że &x(0)jest to równoważne x. I x(0)jest równoważne *x.

Podobnie,

  • &x(1)jest równoważne x+1i x(1)jest równoważne z *(x+1).
  • &x(2)jest równoważne x+2i x(2)jest równoważne z *(x+2).
  • Zasadniczo &x(i)jest równoważny x+ii x(i)jest równoważny z *(x+i).

Przykład 1: Wskaźniki i tablice

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Po uruchomieniu programu wynik będzie następujący:

 Wpisz 6 liczb: 2 3 4 4 12 4 Suma = 29 

Tutaj zadeklarowaliśmy tablicę x 6 elementów. Aby uzyskać dostęp do elementów tablicy, użyliśmy wskaźników.

W większości kontekstów nazwy tablic rozpadają się na wskaźniki. Mówiąc prościej, nazwy tablic są konwertowane na wskaźniki. To jest powód, dla którego możesz używać wskaźników, aby uzyskać dostęp do elementów tablic. Należy jednak pamiętać, że wskaźniki i tablice to nie to samo .

Jest kilka przypadków, w których nazwy tablic nie rozpadają się na wskaźniki. Aby dowiedzieć się więcej, odwiedź: Kiedy nazwa tablicy nie zamienia się we wskaźnik?

Przykład 2: tablice i wskaźniki

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )

Po uruchomieniu programu wynik będzie następujący:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

W tym przykładzie &x(2)adres trzeciego elementu jest przypisany do wskaźnika ptr. Dlatego 3był wyświetlany podczas drukowania *ptr.

A drukowanie *(ptr+1)daje nam czwarty element. Podobnie drukowanie *(ptr-1)daje nam drugi element.

Interesujące artykuły...