Die Union ist ein benutzerdefinierter Datentyp in der C-Sprache, der ebenso wie die Struktur Elemente der verschiedenen Datentypen enthalten kann. Im Gegensatz zu Strukturen werden jedoch alle Mitglieder der C-Vereinigung am selben Speicherort gespeichert. Aus diesem Grund kann nur ein Mitglied Daten in der jeweiligen Instanz speichern.

Syntax von Union in C
Die Syntax der Union in C kann in drei Schritte unterteilt werden:
C Gewerkschaftserklärung
In diesem Teil deklarieren wir nur die Vorlage der Union, d. h. wir deklarieren nur die Namen und Datentypen der Mitglieder zusammen mit dem Namen der Union. Der Union wird in der Deklaration kein Speicher zugewiesen.
union union_name { datatype member1 ; datatype member2 ; ... };>
Bedenken Sie, dass wir die Gewerkschaftserklärung immer mit einem Semikolon beenden müssen.
Verschiedene Möglichkeiten, eine Unionsvariable zu definieren
Wir müssen eine Variable vom Typ Union definieren, um mit der Verwendung von Union-Mitgliedern beginnen zu können. Es gibt zwei Methoden, mit denen wir eine Unionsvariable definieren können.
- Mit Unionserklärung
- Nach der Unionserklärung
1. Unionsvariable mit Deklaration definieren
union union_name { datatype member1; datatype member2; ... } var1, var2, ...;>
2. Union-Variable nach der Deklaration definieren
union union_name var1, var2, var3 ...;>
Wo Gewerkschaftsname ist der Name einer bereits deklarierten Union.
Zugang zu Gewerkschaftsmitgliedern
Wir können auf die Mitglieder einer Union zugreifen, indem wir den Punktoperator ( . ) verwenden, genau wie Strukturen.
var1.member1 ;>
Wo var1 ist der Unionsvariable Und Mitglied1 ist der Mitglied der Gewerkschaft .
Die obige Methode zum Zugriff auf die Mitglieder der Gewerkschaft funktioniert auch für die verschachtelten Gewerkschaften.
var1.member1.memberA;>
Hier,
- var1 ist eine Unionsvariable.
- Mitglied1 ist Mitglied der Gewerkschaft.
- MitgliedA ist Mitglied von Mitglied1.
Initialisierung von Union in C
Die Initialisierung einer Union ist die Initialisierung ihrer Mitglieder, indem ihr einfach der Wert zugewiesen wird.
var1.member1 = some_value ;>
Eine wichtige Sache, die hier zu beachten ist, ist Folgendes Nur ein Mitglied kann zu einem bestimmten Zeitpunkt einen Wert enthalten.
Beispiel für Union
C
// C Program to demonstrate how to use union> #include> // union template or declaration> union> un {> > int> member1;> > char> member2;> > float> member3;> };> // driver code> int> main()> {> > // defining a union variable> > union> un var1;> > // initializing the union member> > var1.member1 = 15;> > printf> (> 'The value stored in member1 = %d'> ,> > var1.member1);> > return> 0;> }> |
>
>Ausgabe
The value stored in member1 = 15>
Größe der Union
Die Größe der Union entspricht immer der Größe des größten Mitglieds des Arrays. Alle kleineren Elemente können die Daten ohne Überlauf im selben Raum speichern.

Speicherzuweisung in C Union
Beispiel 1: C-Programm zum Ermitteln der Größe der Union
C
// C Program to find the size of the union> #include> // declaring multiple unions> union> test1 {> > int> x;> > int> y;> } Test1;> union> test2 {> > int> x;> > char> y;> } Test2;> union> test3 {> > int> arr[10];> > char> y;> } Test3;> // driver code> int> main()> {> > // finding size using sizeof() operator> > int> size1 => sizeof> (Test1);> > int> size2 => sizeof> (Test2);> > int> size3 => sizeof> (Test3);> > printf> (> 'Sizeof test1: %d
'> , size1);> > printf> (> 'Sizeof test2: %d
'> , size2);> > printf> (> 'Sizeof test3: %d'> , size3);> > return> 0;> }> |
>
>
aws snsAusgabe
Sizeof test1: 4 Sizeof test2: 4 Sizeof test3: 40>
Unterschied zwischen C-Struktur und C-Union
In der folgenden Tabelle sind die Hauptunterschiede zwischen Struktur und Union in C aufgeführt:
Struktur | Union |
---|---|
Die Größe der Struktur ist gleich oder größer als die Gesamtgröße aller ihrer Mitglieder. | Die Größe der Gewerkschaft entspricht der Größe ihres größten Mitglieds. |
Die Struktur kann Daten in mehreren Elementen gleichzeitig enthalten. | Es kann jeweils nur ein Mitglied Daten enthalten. |
Es wird mit dem Schlüsselwort struct deklariert. | Es wird mit dem Schlüsselwort Union deklariert. |
FAQs zu C-Gewerkschaften
1. Wie groß ist die gegebene Gewerkschaft?
union un { int a; int arr[20]; }>
Antwort: Die Größe der angegebenen Union beträgt 20 x 4 Bytes = 80 Bytes. Selbst wenn das Array eine Sammlung ähnlicher Datenelemente ist, wird es vom C-Compiler als eine einzelne Entität betrachtet.
2. Können wir Daten bei mehreren Gewerkschaftsmitgliedern gleichzeitig speichern?
Nein. Wir können Daten nur in einem einzelnen Mitglied gleichzeitig speichern. Im folgenden C-Programm haben beispielsweise x und y denselben Speicherort. Wenn wir x ändern, können wir sehen, dass sich die Änderungen in y widerspiegeln.
C
// C program to check if we can store data in multiple union> // members> #include> // Declaration of union is same as structures> union> test {> > int> x, y;> };> int> main()> {> > // A union variable t> > union> test t;> > t.x = 2;> // t.y also gets value 2> > printf> (> 'After making x = 2:
x = %d, y = %d
'> , t.x,> > t.y);> > t.y = 10;> // t.x is also updated to 10> > printf> (> 'After making y = 10:
x = %d, y = %d
'> , t.x,> > t.y);> > return> 0;> }> |
Wie viele Städte gibt es in den Vereinigten Staaten von Amerika?
>
>Ausgabe
After making x = 2: x = 2, y = 2 After making y = 10: x = 10, y = 10>
3. Was sind die Einsatzmöglichkeiten von Gewerkschaften?
Gewerkschaften können in vielen Situationen nützlich sein, in denen wir denselben Speicher für zwei oder mehr Mitglieder verwenden möchten. Angenommen, wir möchten eine binäre Baumdatenstruktur implementieren, bei der jeder Blattknoten einen doppelten Datenwert hat, während jeder interne Knoten Zeiger auf zwei untergeordnete Knoten, aber keine Daten hat. Wenn wir dies als Folgendes deklarieren:
C
struct> NODE {> > struct> NODE* left;> > struct> NODE* right;> > double> data;> };> |
>
>
dann benötigt jeder Knoten 16 Bytes, wobei für jeden Knotentyp die Hälfte der Bytes verschwendet wird. Wenn wir andererseits einen Knoten wie folgt deklarieren, können wir Platz sparen.
C
struct> NODE {> > bool> is_leaf;> > union> {> > struct> {> > struct> NODE* left;> > struct> NODE* right;> > } internal;> > double> data;> > } info;> };> |
>
>