C Gewerkschaften (mit Beispielen)

In diesem Tutorial lernen Sie Gewerkschaften in der C-Programmierung kennen. Genauer gesagt, wie man Gewerkschaften gründet, auf ihre Mitglieder zugreift und die Unterschiede zwischen Gewerkschaften und Strukturen lernt.

Eine Union ist ein benutzerdefinierter Typ, der bis auf einen wesentlichen Unterschied den Strukturen in C ähnelt. Strukturen weisen genügend Speicherplatz zu, um alle ihre Mitglieder zu speichern, während Gewerkschaften den Speicherplatz zuweisen, um nur das größte Mitglied zu speichern.

Wie definiere ich eine Gewerkschaft?

Wir verwenden das unionSchlüsselwort, um Gewerkschaften zu definieren. Hier ist ein Beispiel:

 union car ( char name(50); int price; ); 

Der obige Code definiert einen abgeleiteten Typ union car.

Erstellen Sie Vereinigungsvariablen

Wenn eine Union definiert ist, wird ein benutzerdefinierter Typ erstellt. Es wird jedoch kein Speicher zugewiesen. Um Speicher für einen bestimmten Vereinigungstyp zuzuweisen und damit zu arbeiten, müssen Variablen erstellt werden.

So erstellen wir Vereinigungsvariablen.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Eine andere Möglichkeit zum Erstellen von Vereinigungsvariablen ist:

 union car ( char name(50); int price; ) car1, car2, *car3; 

In beiden Fällen werden die Vereinigungsvariablen car1, car2 und ein Vereinigungszeiger car3 vom union carTyp erstellt.

Greifen Sie auf Mitglieder einer Gewerkschaft zu

Wir verwenden den .Operator, um auf Gewerkschaftsmitglieder zuzugreifen. Für den Zugriff auf Zeigervariablen verwenden wir auch den ->Operator.

Im obigen Beispiel ist

  • Um auf den Preis für zuzugreifen car1, car1.pricewird verwendet.
  • Um auf den Preis zuzugreifen car3, können Sie entweder (*car3).priceoder car3->priceverwenden.

Unterschied zwischen Gewerkschaften und Strukturen

Nehmen wir ein Beispiel, um den Unterschied zwischen Gewerkschaften und Strukturen zu demonstrieren:

 #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; ) 

Ausgabe

 Größe der Vereinigung = 32 Größe der Struktur = 40 

Warum dieser Unterschied in der Größe von Vereinigungs- und Strukturvariablen?

Hier beträgt die Größe von sJob da 40 Bytes

  • Die Größe von name(32)beträgt 32 Bytes
  • Die Größe von salarybeträgt 4 Bytes
  • Die Größe von workerNobeträgt 4 Bytes

Die Größe von uJob beträgt jedoch 32 Byte. Dies liegt daran, dass die Größe einer Vereinigungsvariablen immer der Größe ihres größten Elements entspricht. Im obigen Beispiel beträgt die Größe des größten Elements ( name(32)) 32 Byte.

Bei einer Gewerkschaft teilen sich alle Mitglieder das gleiche Gedächtnis .

Beispiel: Zugriff auf Gewerkschaftsmitglieder

 #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; )

Ausgabe

 Gehalt = 0,0 Anzahl der Arbeitnehmer = 100 

Um zu erfahren, wo Gewerkschaften eingesetzt werden, besuchen Sie Warum brauchen wir C-Gewerkschaften?

Interessante Beiträge...