Różnica między strukturą a połączeniem
Zawartość
C ++ pozwala na wszystkie pięć sposobów, które zapewnia język C, na tworzenie niestandardowych danych. Tych pięć sposobów to „struktura”, „pole bitowe”, „unia”, „wyliczenie”, „typedef”. W poniższym artykule zajmiemy się różnicą między strukturą a zjednoczeniem. Zarówno struktura, jak i związek są typami danych kontenera, które mogą przechowywać dane dowolnego „typu”. Jedną z głównych różnic, które odróżniają strukturę i połączenie, jest to, że struktura ma osobne miejsce pamięci dla każdego ze swoich członków, podczas gdy członkowie związku dzielą tę samą lokalizację pamięci.
Rozumiemy różnicę między strukturą a zjednoczeniem wraz z tabelą porównawczą.
- Wykres porównania
- Definicja
- Kluczowe różnice
- Podobieństwa
- Wniosek
Wykres porównania
Podstawa porównania | Struktura | Unia |
---|---|---|
Podstawowy | Oddzielna lokalizacja pamięci jest przydzielona każdemu członkowi struktury. | Wszyscy członkowie związku dzielą tę samą lokalizację pamięci. |
Deklaracja | struct struct_name { wpisz element1; wpisz element2; . . } zmienna 1, zmienna 2, ...; | u_name { wpisz element1; wpisz element2; . . } zmienna 1, zmienna 2, ...; |
słowo kluczowe | struct | unia |
Rozmiar | Rozmiar struktury = suma wielkości wszystkich elementów danych. | Rozmiar Unii = wielkość największych członków. |
Wartość sklepu | Przechowuje odrębne wartości dla wszystkich członków. | Przechowuje tę samą wartość dla wszystkich członków. |
Na czas | Struktura przechowuje wiele wartości różnych elementów struktury. | Związek przechowuje pojedynczą wartość naraz dla wszystkich członków. |
Sposób oglądania | Podaj jeden sposób wyświetlania każdej lokalizacji pamięci. | Podaj wiele sposobów, aby wyświetlić tę samą lokalizację pamięci. |
Funkcja anonimowa | Brak funkcji anonimowych. | Anonimowy związek można zadeklarować. |
Definicja struktury
Struktura jest zbiorem zmiennych różnych typów danych, które są nazywane wspólną nazwą. Zmienne w strukturze nazywane są „elementami”. Domyślnie wszyscy członkowie struktury są „publiczni”. Deklarując strukturę, tworzysz szablon, którego można używać do tworzenia obiektów struktury, współużytkując tę samą organizację elementów danych i funkcji elementów. Deklaracja struktury jest zawsze poprzedzona słowem kluczowym „struct”, które informuje kompilator, że struktura została zadeklarowana. Weźmy przykład.
Weźmy przykład.
struct pracownik {nazwa ciągu; ciąg nazwa_firmy; miasto strun; } emp1, emp2;
Tutaj deklarujemy strukturę do przechowywania informacji pracowników. Deklaracja jest zakończona średnikiem, ponieważ deklaracja struktury jest instrukcją, aw C ++ instrukcja jest zakończona średnikiem.
Nazwa nadana strukturze definiuje „typ” (w powyższym przykładzie nazwa struktury to „pracownik”). Zmienne tych typów można utworzyć, ponieważ powyżej utworzyliśmy dwie zmienne „emp1” i „emp2” typu „pracownik”. W powyższym przykładzie utworzyliśmy zmienną „struktura” zaraz po deklaracji; alternatywnie można go utworzyć osobno.
struct pracownik emp1, emp2; // słowo kluczowe struct nie jest obowiązkowe.
Elementy zmiennej struktury można zainicjować lub uzyskać do nich dostęp za pomocą operatora kropki (.).
emp1.name = "ashok";
Informacje zawarte w jednej zmiennej struktury można przypisać do innej zmiennej struktury tego samego typu, jak poniżej.
emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // przypisywanie wartości elementu emp1 do emp2. cout <
Tutaj przypisaliśmy zmienną struktury „emp1” do „emp2”, więc „emp1” kopiuje wszystkie wartości swoich elementów do odpowiedniego elementu „epm2”.
Element zmiennej struktury można przekazać do funkcji.
funk (emp1.city);
Cała zmienna struktury może być przekazana do funkcji, zarówno metodami call by value, jak i call by reference.
funt (emp1); // wywołanie funkcji metodą call by value . . void FUN (struct pracownik emp) {// odbieranie wartości członków emp1. cout <
W tym przypadku zmiana wartości elementu zmiennej struktury nie będzie odzwierciedlać poza funkcją, ponieważ zmienna jest przekazywana metodą call by value. Teraz zróbmy to samo przez wywołanie metodą referencyjną.
funt (& emp1); // wywołanie funkcji przez wywołanie metodą referencyjną. . . void FUN (struct pracownik * emp) {// adres odbiorczy emp1. emp-> miasto = "Nur"; // zmień wartość członka (miasta) zmiennej struktury emp1. . }
W tym przypadku zmienna struktury jest przekazywana przez odniesienie, więc zmiana wartości elementów zmiennej struktury również odzwierciedla poza funkcją.
srtuct pracownik * emp; // dekalowanie wskaźnika struktury typu pracownik. emp = & emp1; // przypisanie adresu emp1 do wskaźnika. emp-> miasto // wskaźnik uzyskujący dostęp do miasta członkowskiego emp1.
Można również utworzyć wskaźnik do struktury; przechowuje adres zmiennej struktury.
W strukturze dozwolone jest inicjowanie agregatów, gdy definicja struktury nie zawiera żadnego konstruktora lub funkcji wirtualnych zdefiniowanych przez użytkownika, klasy bazowej lub pola prywatnego lub chronionego.
int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Możliwe, ponieważ struktura pracownika nie zawiera żadnej z wyżej wymienionych rzeczy.
Definicja Unii
Związek to lokalizacja pamięci współdzielona przez co najmniej dwa różne typy zmiennych zadeklarowanych w ramach jednego typu związku. Słowem kluczowym używanym do deklarowania związku jest „związek”. W C ++ związek może zawierać zarówno funkcję członka, jak i zmienne. Domyślnie wszyscy członkowie związku są „publiczni”. Deklaracja „unii” jest podobna do deklaracji struktury.
union u_type {int x, char c; pływak f; } u1, u2;
Tutaj zadeklarowaliśmy związek o nazwie u_type. Członkowie typu u_type to „x” typu liczb całkowitych, „c” typu znaków i „f” typu float. Stworzyliśmy również zmienne unii „u1” i „u2” typu „u_type” tuż po deklaracji związku. Możemy również zadeklarować zmienną union niezależnie od deklaracji union.
int main () {union u_type u1, u2; // Związek słów kluczowych nie jest obowiązkowy w C ++. }
Dostęp do członków unii można uzyskać za pomocą operatora kropki (.), Poprzedzonego zmienną union i podążającą za członkiem tej zmiennej.
u1.x = 10;
Podobnie jak struktury, agregacja inicjalizacji nie jest możliwa w unii. Jak wiemy, związek dzieli tę samą lokalizację pamięci dla wszystkich swoich elementów jednocześnie, tylko jedna zmienna jest inicjowana, a wszystkie zmienne są automatycznie aktualizowane o zainicjowanej wartości.
u1.x = 10; cout <
Jeśli spróbujesz zmienić wartość dowolnego członka „u1”. Drugi członek zostanie automatycznie zaktualizowany do tej wartości.
u1.c = 65; cout <
Miejsce przydzielone do związku jest równe wielkości największego członka związku. Ponieważ bajt przypisany do „char” to 1 bajt, „int” to 4 bajty, a „float” to 4 bajty, więc największy rozmiar to 4 bajty. Pamięć przydzielona do „u1” i „u2” to 4 bajty.
int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4
Wskaźnik do unii można utworzyć podobnie jak w strukturze. Wskaźnik zawiera adres związku.
union u_type * un; un = & u1; cout < Podobnie jak struktura, połączenie może być również przekazane do funkcji za pomocą obu metod, tj. Wywołania według wartości i wywołania przez odniesienie. funk (u1); // wywołanie funkcji metodą call by value . . void function (union u_type un) {// odbieranie wartości członka u1. cout < Teraz wywołajmy funkcję przy użyciu metody call by reference. funk (& u1); // wywołanie funkcji przez wywołanie metodą referencyjną. . . void function (union u_type un) {// odbieranie adresu u1. un-> x = 20. } W C ++ istnieje specjalny typ unii zwany Anonymous Union ”. Anonimowy związek nie może mieć nazwy typu i nie można utworzyć żadnej zmiennej takiego związku. Służy tylko poinstruowaniu kompilatora, że jego zmienne składowe mają współdzielić tę samą lokalizację. Do zmiennej anonimowego związku można się odwoływać bez zwykłego operatora kropki (.). int main () {union {// zdefiniuj anonimowy związek bez nazwy typu. int x, char c; pływak f; }; x = 10; // odwołano do zmiennej uni bez operatora kropki cout < W związku anonimowym żadna funkcja członka nie jest dozwolona, nie może zawierać danych prywatnych ani chronionych, a globalny związek anonimowy musi być określony jako „statyczny”. Należy pamiętać o zwykłej deklaracji związkowej. Zarówno struktura, jak i związek są typem kontenera, który zawiera element członkowski różnych typów. Ale struktury są używane, gdy musimy przechowywać odrębną wartość dla wszystkich członków w odrębnym miejscu pamięci. Związki są używane, gdy konieczna jest konwersja typu.
Podobieństwa:
Wniosek: