C-Unions erklärt: Definition, Nutzung & Vergleich mit Strukturen
C-Unions erklärt
Lernen Sie, wie man C-Unions definiert, erstellt und darauf zugreift, und entdecken Sie, warum sie sich in Speicherlayout und Anwendung von Strukturen unterscheiden.
Eine Union ist ein benutzerdefinierter Typ in C, der – im Gegensatz zu einem Struct – immer nur einen seiner Mitgliedswerte gleichzeitig halten kann. Dies macht Unions ideal für speichereffiziente Datenrepräsentationen und Type-Punning in der Low-Level-Programmierung.
Eine Union definieren
Verwenden Sie das Schlüsselwort union, um einen neuen Typ zu deklarieren. Zum Beispiel:
union Car {
char name[50];
int price;
};
Der obige Code erstellt einen abgeleiteten Typ union Car, der entweder einen 50-Zeichen-String oder einen Integer-Preis speichern kann.
Union-Variablen erstellen
Die Definition einer Union allokiert keinen Speicher. Um sie zu nutzen, deklarieren Sie Variablen dieses Typs:
union Car car1, car2, *car3;
Alternativ können Sie Definition und Variablendeklaration kombinieren:
union Car {
char name[50];
int price;
} car1, car2, *car3;
In beiden Beispielen sind car1 und car2 Union-Instanzen, während car3 ein Zeiger auf eine Union ist.
Auf Union-Mitglieder zugreifen
Verwenden Sie den Punktoperator (.) für direkten Zugriff und den Pfeiloperator (->) für Zeigerzugriff:
car1.price– greift auf das price-Feld voncar1zu.car3->priceoder(*car3).price– greift über einen Zeiger auf price zu.
Unions vs. Strukturen
Während Structs genug Platz für alle Mitglieder allokieren, entspricht die Größe einer Union der Größe ihres größten Mitglieds. Betrachten Sie diesen Vergleich:
#include <stdio.h>
union UnionJob {
char name[32];
float salary;
int workerNo;
} uJob;
struct StructJob {
char name[32];
float salary;
int workerNo;
} sJob;
int main() {
printf("size of union = %zu bytes\n", sizeof(uJob));
printf("size of structure = %zu bytes", sizeof(sJob));
return 0;
}
Ausgabe:
size of union = 32 size of structure = 40
Hier belegt das Struct 40 Bytes (32 + 4 + 4), während die Union nur 32 Bytes belegt – die Größe ihres größten Mitglieds, name[32]. Alle Union-Mitglieder teilen sich denselben Speicherbereich.
Praxisbeispiel: Mitglied-Überschreibung
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
j.workerNo = 100; // überschreibt den vorherigen Wert
printf("Salary = %.1f\n", j.salary);
printf("Number of workers = %d", j.workerNo);
return 0;
}
Ausgabe:
Salary = 0.0 Number of workers = 100
Da salary und workerNo denselben Speicher teilt, löscht das Schreiben in eines das andere.
Um reale Anwendungsfälle zu erkunden, lesen Sie Warum brauchen wir C-Unions?.
C Sprache
- Java Enums meistern: Vollständiger Leitfaden zu Enums & Enum-Klassen
- Java Enum-Konstruktoren erklärt mit praktischem Beispiel
- C-Unions erklärt: Effizientes Speichermanagement für mehrere Datentypen
- Pneumatische Ventile richtig dimensionieren: Ein praktischer Leitfaden
- KI im Fertigungsmarkt soll bis 2026 4,8 Mrd. $ erreichen, Wachstum von 28,1 % CAGR
- Professioneller Leitfaden zum sicheren und präzisen Schneiden von Aluminium-Stabmaterial
- Rohrverbinder (Pipe Unions): Definition, Nutzen & Vorteile
- Experten-Leitfaden: Gewerbliche Klimaanlage richtig dimensionieren für optimale Leistung
- Die richtige Drehmaschinengröße für die Büchsenmacherei: Kaufberatung
- Den richtigen Druckluftbehälter dimensionieren: Leistung & Effizienz optimieren