Struktury C i wskaźniki (z przykładami)

W tym samouczku nauczysz się używać wskaźników, aby uzyskać dostęp do elementów struktur w programowaniu w C. Dowiesz się również, jak dynamicznie alokować pamięć typów struktur.

Zanim dowiesz się, jak używać wskaźników ze strukturami, zapoznaj się z tymi samouczkami:

  • Wskaźniki C.
  • C struct

C Wskaźniki do struktury

Oto, jak możesz tworzyć wskaźniki do struktur.

 struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )

Tutaj ptr jest wskaźnikiem do struct.

Przykład: dostęp do członków przy użyciu wskaźnika

Aby uzyskać dostęp do elementów struktury za pomocą wskaźników, używamy ->operatora.

 #include struct person ( int age; float weight; ); int main() ( struct person *personPtr, person1; personPtr = &person1; printf("Enter age: "); scanf("%d", &personPtr->age); printf("Enter weight: "); scanf("%f", &personPtr->weight); printf("Displaying:"); printf("Age: %d", personPtr->age); printf("weight: %f", personPtr->weight); return 0; )

W tym przykładzie adres osoby1 jest przechowywany we wskaźniku personPtr przy użyciu personPtr = &person1;.

Teraz możesz uzyskać dostęp do członków osoby1 za pomocą personPtrwskaźnika.

Tak poza tym,

  • personPtr->age jest równa (*personPtr).age
  • personPtr->weight jest równa (*personPtr).weight

Dynamiczna alokacja pamięci struktur

Przed wykonaniem tej sekcji zalecamy sprawdzenie dynamicznej alokacji pamięci C.

Czasami liczba zadeklarowanych zmiennych strukturalnych może być niewystarczająca. Może być konieczne przydzielenie pamięci w czasie wykonywania. Oto, jak możesz to osiągnąć w programowaniu w C.

Przykład: dynamiczna alokacja pamięci struktur

 #include #include struct person ( int age; float weight; char name(30); ); int main() ( struct person *ptr; int i, n; printf("Enter the number of persons: "); scanf("%d", &n); // allocating memory for n numbers of struct person ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i name and ptr->age is used // To access members of 2nd struct person, // (ptr+1)->name and (ptr+1)->age is used scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); ) printf("Displaying Information:"); for(i = 0; i name, (ptr+i)->age); return 0; ) 

Po uruchomieniu programu wynik będzie następujący:

 Podaj liczbę osób: 2 Wpisz odpowiednio imię i wiek: Harry 24 Wpisz odpowiednio imię i wiek: Gary 32 Wyświetlanie informacji: Imię: Harry Wiek: 24 Imię: Gary Wiek: 32

W powyższym przykładzie tworzonych jest n liczba zmiennych strukturalnych, gdzie n jest wprowadzane przez użytkownika.

Aby przydzielić pamięć dla n liczby osób w strukturze, użyliśmy,

 ptr = (struct person*) malloc(n * sizeof(struct person));

Następnie użyliśmy wskaźnika ptr, aby uzyskać dostęp do elementów osoby.

Interesujące artykuły...