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ą.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje równoważność nazw tablic i wskaźników do ich pierwszych elementów. Twój program powinien:
- Zadeklarować tablicę liczb całkowitych o nazwie
numbersz 4 elementami i zainicjalizować ją wartościami {10, 20, 30, 40} - Zadeklarować wskaźnik do liczby całkowitej o nazwie
ptr - Przypisać nazwę tablicy
numbersdo wskaźnikaptr - Wypisać adres przechowywany w
numbersza pomocąprintfze specyfikatorem formatu%p - Wypisać adres pierwszego elementu
&numbers[0]za pomocąprintfze specyfikatorem formatu%p - Wypisać adres przechowywany w
ptrza pomocąprintfze specyfikatorem formatu%p - Wypisać wartość pierwszego elementu, używając nazwy tablicy:
*numbers - 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: 10To 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;
}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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online