Menu
Coddy logo textTech

Elementy tablic — wskaźniki

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 8 z 63.

Teraz, gdy rozumiesz, jak nazwy tablic działają jako wskaźniki, możesz wykorzystać tę wiedzę, aby uzyskiwać dostęp do elementów tablicy w zupełnie inny sposób. Zamiast używać znanej notacji nawiasowej, takiej jak array[i], możesz użyć notacji wskaźnikowej, aby osiągnąć ten sam rezultat.

Kluczowy wniosek jest taki, że array[i] jest dokładnie równoważne *(array + i). Gdy zapisujesz array + i, każesz językowi C przesunąć się o i pozycji od początku tablicy. Operator wyłuskania * pobiera następnie wartość z tej lokalizacji.

int numbers[5] = {10, 20, 30, 40, 50};
// Te dwie linie robią dokładnie to samo:
printf("%d", numbers[2]);    // Wyświetla 30
printf("%d", *(numbers + 2)); // Również wyświetla 30

Ta notacja wskaźnikowa działa, ponieważ C automatycznie oblicza prawidłowy adres pamięci na podstawie rozmiaru typu danych. Gdy dodasz 2 do wskaźnika na tablicę liczb całkowitych, C przesuwa się do przodu o 2 × sizeof(int) bajtów, trafiając dokładnie na trzeci element.

Zrozumienie tej równoważności daje ci swobodę w pracy z tablicami i przygotowuje do bardziej zaawansowanych technik wskaźnikowych, które poznasz w miarę dalszej nauki języka C.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje dostęp do elementów tablicy za pomocą notacji wskaźnikowej zamiast tradycyjnego indeksowania tablicy. Program powinien:

  1. Zadeklarować tablicę liczb całkowitych o nazwie values z 6 elementami i zainicjalizować ją wartościami {5, 15, 25, 35, 45, 55}
  2. Użyć pętli for, aby przejść przez wszystkie elementy tablicy
  3. Wewnątrz pętli użyć notacji wskaźnikowej *(values + i), aby uzyskać dostęp do każdego elementu (nie używać notacji nawiasowej, takiej jak values[i])
  4. Wypisać każdy element, używając dostępu za pomocą notacji wskaźnikowej
  5. Po pętli zademonstrować równoważność, wypisując trzeci element (indeks 2) za pomocą obu metod:
    • Najpierw za pomocą notacji wskaźnikowej: *(values + 2)
    • Następnie za pomocą tradycyjnej notacji tablicowej: values[2]

Wynik powinien być wyświetlony w następującym formacie:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

To wyzwanie sprawdza, czy rozumiesz równoważność między array[i] a *(array + i), pokazując, jak arytmetyka wskaźników pozwala uzyskiwać dostęp do elementów tablicy za pomocą obliczeń adresów pamięci zamiast tradycyjnego indeksowania.

Spróbuj swoich sił

#include <stdio.h>

int main() {
    // TODO: Napisz tutaj swój kod
    // Zadeklaruj i zainicjalizuj tablicę 'values' z 6 elementami
    // Użyj pętli for, aby wypisać każdy element za pomocą notacji wskaźnikowej *(values + i)
    // Po zakończeniu pętli wypisz trzeci element, używając zarówno notacji wskaźnikowej, jak i tablicowej
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online