Menu
Coddy logo textTech

Wskaźniki do struktur

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

Skoro swobodnie posługujesz się już strukturami, czas połączyć je z innym potężnym elementem języka C: wskaźnikami. Tak jak możesz tworzyć wskaźniki do podstawowych typów danych, takich jak int lub char, możesz też tworzyć wskaźniki przechowujące adres zmiennej typu strukturalnego.

Składnia deklarowania wskaźnika do struktury jest taka sama jak w przypadku innych deklaracji wskaźników:

struct StructureName *pointerName;

Na przykład, używając znanej nam struktury Point:

struct Point p1 = {10, 20};
struct Point *ptr;

Tworzy to wskaźnik o nazwie ptr, który może przechowywać adres struktury Point. Aby wskaźnik faktycznie wskazywał na naszą zmienną będącą strukturą, użyj operatora pobrania adresu:

ptr = &p1;

Teraz ptr przechowuje adres pamięci zmiennej struktury p1. Otwiera to nowe możliwości pracy ze strukturami, zwłaszcza podczas przekazywania ich do funkcji lub dynamicznego zarządzania pamięcią. Wskaźniki do struktur są niezbędne do budowania bardziej złożonych struktur danych i pisania wydajnych programów w C.

challenge icon

Wyzwanie

Łatwy

Utwórz program w C, który demonstruje pracę ze wskaźnikami do struktur. Twój program powinien:

  1. Zdefiniować struct o nazwie Product z następującymi składowymi:
    • Liczba całkowita id do przechowywania identyfikatora produktu
    • Tablica znaków name o rozmiarze 25 do przechowywania nazwy produktu
    • Liczba zmiennoprzecinkowa price do przechowywania ceny produktu
    • Liczba całkowita quantity do przechowywania dostępnej ilości
  2. W funkcji main utworzyć zmienną typu Product o nazwie item i zainicjalizować ją następującymi wartościami:
    • ID: 501
    • Nazwa: "Laptop"
    • Cena: 899.99
    • Ilość: 15
  3. Zadeklarować wskaźnik do struktury Product o nazwie itemPtr
  4. Przypisać adres zmiennej item do itemPtr, używając operatora pobrania adresu
  5. Wypisać oryginalne informacje o produkcie, uzyskując bezpośredni dostęp do składowych struktury (za pomocą operatora kropki) w dokładnie takim formacie:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Wypisać te same informacje o produkcie, uzyskując dostęp do składowych struktury za pośrednictwem wskaźnika (za pomocą operatora dereferencji i notacji kropkowej: (*itemPtr).member) w dokładnie takim formacie:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Zweryfikować, czy wskaźnik prawidłowo wskazuje na strukturę, wypisując adresy pamięci w dokładnie takim formacie:
    • Address of item: [address]
    • Value of itemPtr: [address]
    • Address verification: [result]

Podczas weryfikacji adresu wypisz Match, jeśli adresy są takie same, lub No Match, jeśli są różne.

To wyzwanie sprawdza Twoje rozumienie deklarowania wskaźnika do struktury, przypisywania adresu za pomocą operatora pobrania adresu oraz uzyskiwania dostępu do składowych struktury za pośrednictwem wskaźników przy użyciu operatora dereferencji połączonego z notacją kropkową. Sprawdzisz również, czy wskaźnik prawidłowo przechowuje adres zmiennej struktury.

Spróbuj swoich sił

#include <stdio.h>
#include <string.h>

// TODO: Zdefiniuj tutaj strukturę Product

int main() {
    // TODO: Napisz tutaj swój kod
    // 1. Utwórz i zainicjalizuj zmienną 'item' typu Product
    // 2. Zadeklaruj wskaźnik do Product o nazwie 'itemPtr'
    // 3. Przypisz adres 'item' do 'itemPtr'
    // 4. Wypisz pierwotne informacje o produkcie, używając operatora kropki
    // 5. Wypisz informacje o produkcie za pomocą wskaźnika, używając (*itemPtr).member
    // 6. Wypisz i sprawdź adresy
    
    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