Operator strzałki (->)
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 45 z 63.
Podczas pracy ze wskaźnikami do struktur dostęp do składowych struktury wymaga specjalnej składni. Możesz użyć operatora dereferencji i notacji kropkowej razem, ale C udostępnia wygodniejszy operator przeznaczony specjalnie do tego celu: operator strzałki (->).
Operator strzałki pozwala uzyskać dostęp do składowych struktury za pośrednictwem wskaźnika w czytelny i przejrzysty sposób:
ptr->memberJest to równoważne zapisowi (*ptr).member, ale znacznie bardziej zwięzłe.
Oto jak działa to w praktyce:
struct Point p1 = {10, 20};
struct Point *ptr = &p1;
// Użycie operatora strzałki
printf("x = %d, y = %d\n", ptr->x, ptr->y);
// To jest równoważne zapisowi:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);Operator strzałki sprawia, że kod jest bardziej przejrzysty i łatwiejszy do czytania, zwłaszcza podczas pracy ze złożonymi strukturami danych. To standardowy sposób uzyskiwania dostępu do składowych struktur za pomocą wskaźników w programowaniu w C.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje użycie operatora strzałki do uzyskiwania dostępu do składowych struktury za pośrednictwem wskaźników. Twój program powinien:
- Zdefiniować
structo nazwieBookz następującymi składowymi:- Liczbę całkowitą
iddo przechowywania identyfikatora książki - Tablicę znaków
titleo rozmiarze 40 do przechowywania tytułu książki - Tablicę znaków
authoro rozmiarze 30 do przechowywania nazwiska autora - Liczbę zmiennoprzecinkową
pricedo przechowywania ceny książki - Liczbę całkowitą
pagesdo przechowywania liczby stron
- Liczbę całkowitą
- W funkcji main utworzyć zmienną typu
Booko nazwiemyBook - Zadeklarować wskaźnik do struktury
Booko nazwiebookPtr - Przypisać adres zmiennej
myBookdobookPtr - Wczytać następujące wartości wejściowe i przypisać je do składowych struktury za pomocą operatora strzałki i wskaźnika:
- Wczytać liczbę całkowitą będącą identyfikatorem i przypisać ją za pomocą
bookPtr->id - Wczytać ciąg znaków będący tytułem i przypisać go za pomocą
bookPtr->title - Wczytać ciąg znaków będący nazwiskiem autora i przypisać go za pomocą
bookPtr->author - Wczytać liczbę zmiennoprzecinkową będącą ceną i przypisać ją za pomocą
bookPtr->price - Wczytać liczbę całkowitą będącą liczbą stron i przypisać ją za pomocą
bookPtr->pages
- Wczytać liczbę całkowitą będącą identyfikatorem i przypisać ją za pomocą
- Po wczytaniu wszystkich wartości wykonać następujące operacje za pomocą operatora strzałki:
- Zastosować 10% zniżki do ceny:
bookPtr->price = bookPtr->price * 0.9; - Dodać 50 stron bonusowych:
bookPtr->pages += 50;
- Zastosować 10% zniżki do ceny:
- Wypisać informacje o książce, używając operatora strzałki do uzyskania dostępu do każdej składowej, dokładnie w następującym formacie:
Book Information:ID: [id]Title: [title]Author: [author]Price: [price]Pages: [pages]
- Obliczyć i wypisać cenę za stronę, używając operatora strzałki, w formacie:
Price per page: [price_per_page]
To wyzwanie sprawdza Twoją znajomość operatora strzałki służącego do uzyskiwania dostępu do składowych struktury za pośrednictwem wskaźników. Przećwiczysz używanie składni ptr->member zarówno do odczytywania, jak i zapisywania składowych struktury, pokazując, że jest ona równoważna zapisowi (*ptr).member, ale znacznie wygodniejsza i czytelniejsza.
Spróbuj swoich sił
#include <stdio.h>
#include <string.h>
// TODO: Zdefiniuj tutaj strukturę Book
int main() {
// TODO: Utwórz zmienną typu Book o nazwie myBook
// TODO: Zadeklaruj wskaźnik na Book o nazwie bookPtr
// TODO: Przypisz adres myBook do bookPtr
// Odczytaj wartości wejściowe
int id;
char title[40];
char author[30];
float price;
int pages;
scanf("%d", &id);
scanf("%s", title);
scanf("%s", author);
scanf("%f", &price);
scanf("%d", &pages);
// TODO: Przypisz wartości wejściowe do pól struktury za pomocą operatora strzałki
// TODO: Zastosuj rabat 10% do price za pomocą operatora strzałki
// TODO: Dodaj 50 dodatkowych stron za pomocą operatora strzałki
// TODO: Wypisz informacje o książce za pomocą operatora strzałki
// TODO: Oblicz i wypisz cenę za stronę za pomocą operatora strzałki
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