Związki w c

Związki w c

„Podobnie jak struktury, związki są również zdefiniowane przez użytkownika, ale w przeciwieństwie do struktur, członkowie Unii mają tę samą lokalizację pamięci i nie mają różnych lokalizacji pamięci. Jeśli ogłosimy dwie zmienne w strukturze, a następnie sprawdzi ich adres, zobaczymy, że oba mają różne adresy, co oznacza, że ​​członkowie struktury otrzymują różne lokalizacje pamięci. Zamiast tego deklarujemy te same dwie zmienne w związku i sprawdzamy ich adresy; Będzie zauważone, że oba ich adresy są takie same, co dowodzi, że oba stałe mają tę samą lokalizację pamięci. W przypadku struktury liczba całkowita zajmie cztery bloki, ale w związku zarówno liczba całkowita, jak i charakter będą udostępniać ten sam blok pamięci.

Jedną rzeczą, o której należy pamiętać, jest to, że w związku członkowie będą dzielić tę samą lokalizację pamięci, co oznacza, że ​​jeśli zmiany zostaną wprowadzone w jednym członku, zostaną odzwierciedlone również w innych członkach Unii. Rozmiar związku jest przyjmowany zgodnie z wielkością największego członka związku. Do członków związków można uzyskać za pośrednictwem wskaźników za pomocą operatora (->). Jeśli chcemy przechowywać informacje o wielu obiektach, takich jak książki i sklepy, będziemy musieli zrobić dwie struktury dla każdego z nich. Będzie marnować dużo pamięci. W tym celu używane są związki. Związki mogą zapisać informacje na wielu obiektach."

Składnia

Składnia deklarowania związku jest następująca:

Składnia związków i struktury jest prawie taka sama. Różnica między związkiem a strukturą polega na tym, że używamy Słowa kluczowego zamiast struktury do deklarowania związków. W sekcji zmienne możemy zobaczyć, że zadeklarowaliśmy wiele zmiennych różnych typów danych. To jest to samo, co struktury, ale w strukturach zmienne te mogą być powiązane tylko z jednym obiektem, takim jak książka, uczeń lub klasa itp. Ale w związkach możemy zadeklarować zmienne istotne dla więcej niż jednego obiektu. Na przykład możemy zadeklarować długość tabeli, a także tytuł książki na stole.

Przykład 1

W tym przykładzie stworzyliśmy związek i nadaliśmy mu nazwę „test_union”. W bloku zmiennych zadeklarowaliśmy dwie zmienne jako członkowie naszego związku. Liczba całkowita „X” i postać „Y”. Z blokadą zamykającą, istnieje zmienna typu „test_union.„Możemy również zadeklarować zmienną typu związkowego tak samo jak w strukturach. Za pomocą „zmiennej 1” możemy uzyskać dostęp do członków naszego związku. Wewnątrz funkcji Main (), za pomocą operatora kropki, możemy uzyskać dostęp do zmiennych zadeklarowanych w Unii. Tutaj przypisujemy wartość „75” do „x.”Zauważ, że nie przypisaliśmy żadnej wartości do naszej zmiennej„ Y ”.

#włączać
Union Test_Union

int x;
Char y;
zmienna1;
int main ()

zmienna 1.x = 75;
printf ("x = %d \ n", zmienna1.X);
printf ("y = %c \ n", zmienna1.y);
powrót 0;

Po wykonaniu naszego kodu otrzymamy dane wyjściowe pokazane na poniższym rysunku. Wydrukowaliśmy „x” i jego wartość w ten sam sposób; Wydrukowaliśmy „y” i jego wartość przeciwko niemu. To, co należy powiadomić, jest to, że nie przypisaliśmy żadnej wartości do y. W naszym wyjściu widzimy, że kompilator wydrukował „x” i wartość „75” na nim. Ale przeciwko „y”, wydrukował „k.„Być może zastanawiasz się, dlaczego mamy ten kapitał„ k ”jako wynik„ y.„Wartość„ 75 ”dla„ x ”nie jest problemem. Ale „y” to postać, na której kompilator wydrukował swoją wartość, nawet gdy przekazaliśmy numer do „x."

Wynika to z faktu, że, jak omówiliśmy wcześniej, ten sam blok pamięci jest udostępniany przez członków, którzy są zgrupowane w związku. Deklarowaliśmy „zmienną 1” dla naszego związku i przekazaliśmy wartość za pomocą tej zmiennej. Zmienna 1 przypisała wartość 75 do wszystkich członków Unii. Int wziął tę wartość jako liczbę i wydrukował tę samą wartość. Ale postać wzięła tę wartość jako kod ASCII i przekonwertowała ten kod ASCII na postać. Kod ASCII dla kapitału „K” to „75”, więc zastąpił „75” na „k.„Jest to cały proces związki przydzielania tego samego bloku pamięci do zmiennych.

Przykład 2

W tym przypadku dowiemy się, w jaki sposób związek wykorzystuje pamięć. W tym celu ogłosiliśmy związek jako przykładowy. W przykładzie_union zadeklarowaliśmy cztery stałe i każde z różnymi danych. Deklarowaliśmy int var1, char var2, double var3 i float var4 jako członków naszego związku. W głównej metodzie wydrukowaliśmy instrukcję z funkcją sizeof (). Funkcja sizeof () jest funkcją domyślną w języku C, która otrzymuje rozmiar dowolnego obiektu w naszym kodzie. Przekazaliśmy to imię naszego związku, ponieważ chcemy uzyskać rozmiar, który nasz związek zajmował.

#włączać
Unia przykład_union

int var1;
char var2;
Double var3;
float var4;
;
int main ()

printf („%ld \ n”, sizeof (union przykład_union));
powrót 0;

To jest wyjście po kompilacji naszego kodu. Otrzymamy wyjście 8. W moim systemie wielkość liczby całkowitej wynosi 4 bajty, rozmiar znaku wynosi 1 bajt, rozmiar podwójnego wynosi 8 bajtów, a rozmiar pływaka ponownie wynosi 4 bajty. W naszym przypadku rozmiar podwójnego wynosi 8, który jest największy ze wszystkich rozmiarów, więc kompilator przeznaczył rozmiar 8 do naszego związku. Teraz możemy lepiej zrozumieć, że rozmiar najwyższej zmiennej jest przydzielany do wszystkich danych, a suma ich rozmiarów nie jest używana przez kompilator, jak w przypadku struktury. Dlatego otrzymamy wynik 8 jako nasz wynik.

Wniosek

W tym przewodniku omawialiśmy związki w języku C. Aby zrozumieć pojęcie związków, można powiedzieć, że związki są prawie takie same jak struktury. Ale główną różnicą jest alokacja pamięci. Jest to bardzo skuteczne podczas pisania złożonego kodu, ponieważ w tym czasie programista koncentruje się na wydajności kodu. Dobry programista zawsze stara się zajmować najmniejszą pamięć systemu według jego kodu; Związki pomagają im to zrobić. Dostaliśmy z siebie wszystko, aby pomóc Ci zrozumieć związki, wdrażając i wyjaśniając przykłady. Na końcu tematu możemy powiedzieć, że użycie związków jest dobrym podejściem do obsługi wielu rekordów, a także pisania zoptymalizowanego i dostrojonego kodu. Pomoże również koderowi zoptymalizować kod w celu uzyskania lepszej wydajności.