W tym samouczku dowiesz się o związkach w programowaniu w C. Dokładniej, jak tworzyć związki, uzyskiwać dostęp do ich członków i poznawać różnice między związkami i strukturami.
Unia jest typem zdefiniowanym przez użytkownika, podobnym do struktur w C, z wyjątkiem jednej różnicy klucza. Struktury przydzielają wystarczająco dużo miejsca na przechowywanie wszystkich swoich członków, podczas gdy związki przydzielają miejsce na przechowywanie tylko największego członka.
Jak zdefiniować związek?
Używamy union
słowa kluczowego do definiowania związków. Oto przykład:
union car ( char name(50); int price; );
Powyższy kod definiuje typ pochodny union car
.
Utwórz zmienne sumaryczne
Definiowanie unii powoduje utworzenie typu zdefiniowanego przez użytkownika. Jednak żadna pamięć nie jest przydzielana. Aby przydzielić pamięć dla danego typu unii i pracować z nią, musimy utworzyć zmienne.
Oto jak tworzymy zmienne sumujące.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Innym sposobem tworzenia zmiennych sumarycznych jest:
union car ( char name(50); int price; ) car1, car2, *car3;
W obu przypadkach union car
tworzone są zmienne sumujące car1, car2 i wskaźnik sumujący car3 typu.
Dostęp do członków związku
Używamy .
operatora, aby uzyskać dostęp do członków związku. Aby uzyskać dostęp do zmiennych wskaźnikowych, używamy również ->
operatora.
W powyższym przykładzie
- Aby uzyskać dostęp do ceny za
car1
,car1.price
jest używany. - Do ceny dostępu za pomocą
car3
, albo(*car3).price
czycar3->price
mogą być użyte.
Różnica między związkami i strukturami
Weźmy przykład, aby zademonstrować różnicę między związkami i strukturami:
#include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; )
Wynik
wielkość połączenia = 32 wielkość struktury = 40
Skąd ta różnica w wielkości zmiennych sumarycznych i strukturalnych?
Tutaj rozmiar sJob wynosi 40 bajtów, ponieważ
- rozmiar
name(32)
wynosi 32 bajty - rozmiar
salary
to 4 bajty - rozmiar
workerNo
to 4 bajty
Jednak rozmiar uJob wynosi 32 bajty. Dzieje się tak, ponieważ wielkość zmiennej sumującej zawsze będzie równa wielkości jej największego elementu. W powyższym przykładzie rozmiar największego elementu, ( name(32)
), wynosi 32 bajty.
Dzięki związkowi wszyscy członkowie mają tę samą pamięć .
Przykład: dostęp do członków związku
#include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )
Wynik
Wynagrodzenie = 0,0 Liczba pracowników = 100
Aby dowiedzieć się, gdzie są używane złącza, odwiedź Dlaczego potrzebujemy złączy C?