czwartek, 26 kwietnia 2018

Język C - Union


C - Union

Unia to specjalny typ danych w języku C, który pozwala na przechowywanie różnych typów danych w tym samym miejscu pamięci. Możesz zdefiniować związek z wieloma elementami, ale tylko jeden element może zawierać wartość w danym momencie. Związki zapewniają efektywny sposób wykorzystania tej samej lokalizacji pamięci do wielu celów.

Definiowanie Unii

Aby zdefiniować unię, musisz użyć instrukcji union w taki sam sposób jak podczas definiowania struktury. Wyrażenie union definiuje nowy typ danych z więcej niż jednym elementem dla twojego programu. Format wyrażenia związku jest następujący:
union [union tag] {
   definicja elementu;
   definicja elementu;
   ...
   definicja elementu;
} [jedna lub więcej zmiennych union]; 
Znacznik union jest opcjonalny, a definicja każdego elementu jest normalną definicją zmiennej, na przykład int i; lub float f; lub dowolną inną prawidłową definicję zmiennej. Na końcu definicji union, przed ostatnim średnikiem, można podać jedną lub więcej zmiennych typu union, ale jest to opcjonalne. Oto sposób, w jaki zdefiniujesz typ unii zwany Dane mający trzy elementy i, f i str -
union Dane {
   int i;
   float f;
   char str[20];
} data; 
Teraz zmienna typu Dane może przechowywać liczbę całkowitą, liczbę zmiennoprzecinkową lub ciąg znaków. Oznacza to, że pojedyncza zmienna, w tej samej lokalizacji pamięci, może być używana do przechowywania wielu typów danych. Możesz użyć dowolnego wbudowanego lub zdefiniowanego przez użytkownika typu danych w unii w oparciu o twoje wymagania.
Pamięć zajmowana przez związek będzie wystarczająco duża, aby pomieścić największy element związku. Na przykład w powyższym przykładzie typ danych zajmie 20 bajtów pamięci, ponieważ jest to maksymalna przestrzeń, którą może zająć ciąg znaków. Poniższy przykład pokazuje całkowity rozmiar pamięci zajmowany przez powyższy związek -
#include <stdio.h>
#include <string.h>

union Dane {
   int i;
   float f;
   char str[20];
};

int main( ) {

   union Dane dane;       

   printf( " Rozmiar pamięci zajmowany przez dane : %d\n", sizeof(dane));

   return 0;
}
Gdy powyższy kod zostanie skompilowany i wykonany, wygeneruje się następujący wynik:
Rozmiar pamięci zajmowany przez dane: 20

Dostęp do członków Unii

Aby uzyskać dostęp do dowolnego elementtu unii, używamy operatora dostępu elementu (.) . Operator dostępu do elementów jest kodowany jako okres między nazwą zmiennej związku a elementem związku, do którego chcemy uzyskać dostęp. Użyłbyś słowa kluczowego union do zdefiniowania zmiennych typu union. Poniższy przykład pokazuje, jak używać związków w programie:
#include <stdio.h>
#include <string.h>

union Dane {
   int i;
   float f;
   char str[20];
};

int main( ) {

   union Dane dane;       

   dane.i = 10;
   dane.f = 220.5;
   strcpy( dane.str, "C Programowanie");

   printf( "dane.i : %d\n", dane.i);
   printf( "dane.f : %f\n", dane.f);
   printf( "dane.str : %s\n", dane.str);

   return 0;
}
Gdy powyższy kod zostanie skompilowany i wykonany, wygeneruje się następujący wynik:
dane.i : 1917853763
dane.f : 4122360580327794860452759994368.000000
dane.str : C Programowanie
Tutaj widzimy, że wartości elementów i i f w związku uległy uszkodzeniu, ponieważ końcowa wartość przypisana do zmiennej zajęła miejsce w pamięci i to jest powodem, że wartość elementu str jest bardzo dobrze drukowana.
Teraz spójrzmy jeszcze raz na ten sam przykład, w którym będziemy używać jednej zmiennej na raz, która jest głównym celem posiadania związków:

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

union Dane {
   int i;
   float f;
   char str[20];
};

int main( ) {

   union Dane dane;       

   dane.i = 10;
   printf( "dane.i : %d\n", dane.i);
  
   data.f = 220.5;
   printf( "dane.f : %f\n", dane.f);
  
   strcpy( data.str, "C Programowanie");
   printf( "dane.str : %s\n", dane.str);

   return 0;
}
Gdy powyższy kod zostanie skompilowany i wykonany, wygeneruje się następujący wynik:
dane.i : 10
dane.f : 220.500000
dane.str : C Programming
Tutaj wszystkie elementy drukują się bardzo dobrze, ponieważ jeden element jest używany w tym samym czasie.

Poprzednia strona                                                          Następna strona

Brak komentarzy:

Prześlij komentarz