Złącza C (z przykładami)

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 unionsł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 cartworzone 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.pricejest używany.
  • Do ceny dostępu za pomocą car3, albo (*car3).priceczy car3->pricemogą 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 salaryto 4 bajty
  • rozmiar workerNoto 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?

Interesujące artykuły...