Operator dereferencji (*)
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 4 z 63.
Teraz, gdy wiesz, jak przechowywać adresy w wskaźnikach, musisz nauczyć się uzyskiwać dostęp do rzeczywistej wartości przechowywanej pod tym adresem pamięci. Operator dereferencji (*) pozwala „podążać” za wskaźnikiem, aby uzyskać wartość, na którą wskazuje.
Gdy umieścisz operator * przed zmienną wskaźnikową, uzyskasz dostęp do wartości przechowywanej pod adresem pamięci, który zawiera wskaźnik. Pomyśl o tym jak o poleceniu: „pokaż mi, co znajduje się w pokoju pod tym adresem”.
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Wypisuje 25 - wartość ageWażne jest, aby zrozumieć, że gwiazdka (*) ma w języku C dwa różne znaczenia. Podczas deklarowania wskaźnika, na przykład int *ptr;, gwiazdka wskazuje, że ptr jest wskaźnikiem. Użyta z istniejącym wskaźnikiem, na przykład *ptr, dereferencjonuje wskaźnik, aby uzyskać dostęp do wartości, na którą wskazuje.
Operator dereferencji jest niezbędny, ponieważ zamyka cykl wskaźnika: możesz zapisać adres we wskaźniku za pomocą &, a następnie pobrać wartość spod tego adresu za pomocą *. Pozwala to pośrednio uzyskiwać dostęp do zmiennych i modyfikować je za pomocą ich adresów w pamięci.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje pełny proces pracy ze wskaźnikami: deklarowanie, przypisywanie adresów i dereferencję. Twój program powinien:
- Zadeklarować zmienną całkowitą o nazwie
valuei zainicjalizować ją wartością 75 - Zadeklarować zmienną typu float o nazwie
pricei zainicjalizować ją wartością 19.99 - Zadeklarować wskaźnik do liczby całkowitej o nazwie
value_ptr - Zadeklarować wskaźnik do liczby typu float o nazwie
price_ptr - Użyć operatora pobrania adresu, aby przypisać adres
valuedovalue_ptr - Użyć operatora pobrania adresu, aby przypisać adres
pricedoprice_ptr - Użyć operatora dereferencji, aby wypisać wartość
valueza pośrednictwemvalue_ptr - Użyć operatora dereferencji, aby wypisać wartość
priceza pośrednictwemprice_ptrz dokładnością do 2 miejsc po przecinku
Wynik powinien wyświetlać wartości uzyskane przez dereferencję w następującym formacie:
Value through pointer: 75
Price through pointer: 19.99To wyzwanie sprawdza, czy rozumiesz, jak operator dereferencji odczytuje pierwotną wartość zmiennej, korzystając z adresu zapisanego we wskaźniku.
Spróbuj swoich sił
#include <stdio.h>
int main() {
// TODO: Napisz tutaj swój kod
// 1. Zadeklaruj i zainicjalizuj zmienne
// 2. Zadeklaruj wskaźniki
// 3. Przypisz adresy do wskaźników
// 4. Wypisz wartości uzyskane przez dereferencję wskaźników
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