Menu
CoddyTech

Wskaźniki do struktur

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

Skoro swobodnie pracujesz już ze strukturami, czas połączyć je z innym potężnym konceptem języka C: wskaźnikami. Tak jak możesz tworzyć wskaźniki do podstawowych typów danych, takich jak int czy char, możesz też tworzyć wskaźniki przechowujące adres zmiennej będącej strukturą.

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ą strukturalną, użyj operatora pobrania adresu:

ptr = &p1;

Aby odczytać składową za pomocą wskaźnika, wyłuskuj go, a następnie użyj operatora kropki. Nawiasy są wymagane, ponieważ . wiąże silniej niż *:

printf("%d", (*ptr).x); // to samo co p1.x

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 tworzenia 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:
    • Liczbę całkowitą id do przechowywania identyfikatora produktu
    • Tablicę znaków name o rozmiarze 25 do przechowywania nazwy produktu
    • Liczbę zmiennoprzecinkową price do przechowywania ceny produktu
    • Liczbę całkowitą 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 za pomocą 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. Sprawdzić, 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]

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

To wyzwanie sprawdza, czy rozumiesz deklarowanie wskaźnika do struktury, przypisywanie adresu za pomocą operatora pobrania adresu oraz uzyskiwanie 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ą typu Product o nazwie 'item'
    // 2. Zadeklaruj wskaźnik do Product o nazwie 'itemPtr'
    // 3. Przypisz adres 'item' do 'itemPtr'
    // 4. Wyświetl pierwotne informacje o produkcie, używając operatora kropki
    // 5. Wyświetl informacje o produkcie za pomocą wskaźnika, używając (*itemPtr).member
    // 6. Wyświetl 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