Structures vs. Unions in C: Ein praktischer Leitfaden
Was ist eine Struktur (Structure)?
Eine Struktur ist ein benutzerdefinierter Datentyp in C, der logisch zusammengehörige Daten Elemente verschiedener Typen in einer einzigen Einheit gruppiert. Jedes Member belegt seinen eigenen zusammenhängenden Speicherbereich, sodass eine Struktur mehrere Werte gleichzeitig halten kann.
Beispiel: Ein Studentendatensatz, der Name, Matrikelnummer und Noten unter einem Variablennamen speichert.
Was ist eine Union?
Eine Union ist ebenfalls ein benutzerdefinierter Typ, aber alle Member teilen sich denselben Speicherplatz. Die Größe der Union entspricht der Größe ihres größten Members. Dieses Feature macht Unions ideal für speicherbeschränkte Szenarien, in denen nur ein Member zur Zeit benötigt wird.
Struktur deklarieren
struct Student {
char name[60];
int roll_no;
float marks;
};
Beachten Sie das struct-Schlüsselwort und das Semikolon nach der schließenden Klammer.
Beispiel: Struktur verwenden
#include <stdio.h>
struct Student {
char name[60];
int roll_no;
float marks;
} sdt;
int main(void) {
printf("Enter the following information:\n");
printf("Student name: ");
fgets(sdt.name, sizeof(sdt.name), stdin);
printf("Roll number: ");
scanf("%d", &sdt.roll_no);
printf("Marks: ");
scanf("%f", &sdt.marks);
printf("\nEntered data:\n");
printf("Name: %s", sdt.name);
printf("Roll number: %d\n", sdt.roll_no);
printf("Marks: %.1f\n", sdt.marks);
return 0;
}
Ausgabe (Beispiel):
Enter the following information: Student name: James Roll number: 21 Marks: 67 Entered data: Name: James Roll number: 21 Marks: 67.0
Union deklarieren
union Item {
int x;
float y;
char ch;
};
Beispiel: Union verwenden
#include <stdio.h>
union Item {
int x;
float y;
char ch;
};
int main(void) {
union Item it;
it.x = 12;
it.y = 20.2f;
it.ch = 'a';
printf("x = %d\n", it.x);
printf("y = %f\n", it.y);
printf("ch = %c\n", it.ch);
return 0;
}
Da alle Member Speicher teilen, überschreibt das Setzen von ch die vorherigen Werte von x und y. Nur der zuletzt gespeicherte Wert ist gültig.
Struktur vs. Union
| Merkmal | Struktur (struct) | Union |
|---|---|---|
| Deklarations-Schlüsselwort | struct | union |
| Speicherlayout | Jedes Member erhält eigenen Speicherplatz | Alle Member teilen sich einen Speicherplatz |
| Ändern eines Members | Beeinflusst andere nicht | Überschreibt andere Member |
| Initialisierung | Alle Member können gleichzeitig initialisiert werden | Nur erstes Member kann initialisiert werden |
| Gesamtgröße | Summe aller Member-Größen | Größe des größten Members |
| Typischer Einsatz | Zusammenhängende Daten verschiedener Typen speichern | Einen von mehreren möglichen Typen speichern |
| Zugriffsmuster | Jedes Member jederzeit zugreifbar | Nur ein Member zur Zeit gültig |
| Flexible Array Unterstützung | Unterstützt | Nicht unterstützt |
Wann was verwenden?
- Struktur: Wenn Sie mehrere verwandte Felder gleichzeitig behalten müssen, z. B. Datensatz eines Studenten oder Mitarbeiters.
- Union: Wenn ein Wert von mehreren Typen sein kann, aber immer nur einer zur Zeit, z. B. Variant-Typ oder speicherbeschränkter Sensorwert.
Vor- und Nachteile
Struktur-Vorteile
- Gruppiert verwandte Daten unter einem Namen, verbessert Lesbarkeit.
- Einfaches Übergeben ganzer Datensätze an Funktionen.
- Arrays von Strukturen ermöglichen Speicherung vieler Datensätze.
- Unterstützt flexible Arrays für variabel-lange Daten.
Struktur-Nachteile
- Benötigt mehr Speicher, da jedes Member gespeichert wird.
- Änderungen an Strukturdefinition wirken sich im gesamten Code aus.
- Können in großen Projekten mit tief verschachtelten Strukturen unhandlich werden.
Union-Vorteile
- Minimaler Speicherbedarf: nur Größe des größten Members.
- Nützlich für Type-Tags oder Variant-Daten.
- Kann Code vereinfachen, der einen einzelnen Wert variablen Typs nutzt.
Union-Nachteile
- Nur ein Member kann zur Zeit einen gültigen Wert halten.
- Schwerer zu debuggen wegen geteiltem Speicher.
- Keine flexiblen Arrays möglich.
C Sprache
- Asbest vs. Glasfaser: Wichtige Unterschiede, Anwendungen und Sicherheitsaspekte
- C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle
- C# vs C++: Klare Vergleich von Features, Performance und Use Cases
- C vs. C++: Wichtige Unterschiede & Wann welche Sprache wählen
- C vs. Java: Umfassender Vergleich von Features, Geschichte und Anwendungen
- strlen() vs. sizeof() in C: Unterschiede verstehen und richtig anwenden
- Python vs. JavaScript: Wichtige Unterschiede, Features und Entscheidungshilfen
- DC- vs. AC-Motoren: Wichtige Unterschiede & Kaufberatung
- Hartlöten vs. Weichlöten: Metallurgische Unterschiede und Praxiseinsatz
- Zweitakt- vs. Viertaktmotoren: Wichtige Unterschiede erklärt