Menu
Coddy logo textTech

Nazwy tablic jako wskaźniki

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

Tablice i wskaźniki w C mają szczególną relację, która ma fundamentalne znaczenie dla zrozumienia, jak C operuje na danych w pamięci. Gdy deklarujesz tablicę, jej nazwa działa jak stały wskaźnik do pierwszego elementu tablicy.

Oznacza to, że gdy masz tablicę taką jak int numbers[5];, nazwa numbers jest w istocie wskaźnikiem, który zawsze wskazuje na numbers[0]. Możesz myśleć o nazwie tablicy jak o wbudowanym wskaźniku, którego nie musisz deklarować osobno.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' wskazuje na pierwszy element
// numbers == &numbers[0]  // Są równoważne!

Ta równoważność jest kluczowa: numbers i &numbers[0] wskazują dokładnie ten sam adres pamięci. Nazwa tablicy to po prostu wygodniejszy sposób odwoływania się do adresu pierwszego elementu, bez konieczności używania operatora pobrania adresu.

Zrozumienie tej zależności otwiera drogę do stosowania technik wskaźnikowych z tablicami, co może sprawić, że Twój kod będzie bardziej elastyczny i wydajny. Kluczowa różnica polega na tym, że w przeciwieństwie do zwykłych wskaźników nazwy tablic są stałymi wskaźnikami — nie możesz zmienić tego, na co wskazują.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który demonstruje równoważność nazw tablic i wskaźników do ich pierwszych elementów. Twój program powinien:

  1. Zadeklarować tablicę liczb całkowitych o nazwie numbers z 4 elementami i zainicjalizować ją wartościami {10, 20, 30, 40}
  2. Zadeklarować wskaźnik do liczby całkowitej o nazwie ptr
  3. Przypisać nazwę tablicy numbers do wskaźnika ptr
  4. Wypisać adres przechowywany w numbers za pomocą printf ze specyfikatorem formatu %p
  5. Wypisać adres pierwszego elementu &numbers[0] za pomocą printf ze specyfikatorem formatu %p
  6. Wypisać adres przechowywany w ptr za pomocą printf ze specyfikatorem formatu %p
  7. Wypisać wartość pierwszego elementu, używając nazwy tablicy: *numbers
  8. Wypisać wartość pierwszego elementu, używając wskaźnika: *ptr

Wynik powinien wyświetlać rezultaty w następującym formacie:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

To wyzwanie pokazuje, że nazwa tablicy działa jak stały wskaźnik do pierwszego elementu oraz że numbers, &numbers[0] i ptr zawierają ten sam adres pamięci, gdy do ptr zostanie przypisana nazwa tablicy.

Spróbuj swoich sił

#include <stdio.h>

int main() {
    // TODO: Napisz tutaj swój kod
    // 1. Zadeklaruj i zainicjalizuj tablicę 'numbers' wartościami {10, 20, 30, 40}
    // 2. Zadeklaruj wskaźnik na liczbę całkowitą o nazwie 'ptr'
    // 3. Przypisz nazwę tablicy do wskaźnika
    // 4. Wypisz wszystkie wymagane adresy i wartości
    
    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