single
Vereinigungen
Swipe um das Menü anzuzeigen
Eine Union ist ein benutzerdefinierter Datentyp in C, ähnlich wie eine Struktur. Der Hauptunterschied besteht darin, dass alle ihre Mitglieder denselben Speicherbereich teilen. Zu jedem Zeitpunkt kann nur ein Mitglied einen Wert speichern.
Unions werden selten verwendet, sind jedoch nützlich, wenn eine Variable verschiedene Datentypen zu unterschiedlichen Zeiten aufnehmen soll und dabei Speicher gespart werden soll.
Die Daten befinden sich im selben Speicherbereich für alle Mitglieder der Union. Das bedeutet, dass alle Mitglieder der Union die gleiche Speicheradresse teilen und die Größe der Union der Größe ihres größten Mitglieds entspricht.
Der Hauptzweck einer Union ist die Überlagerung verschiedener Datentypen auf einen gemeinsamen Speicherbereich, also die Darstellung eines Speicherbereichs als unterschiedliche Datentypen.
Da in der Union die Felder in derselben Speicherzelle liegen, können wir dieselben Daten auf unterschiedliche Weise verarbeiten:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
Im Beispiel teilen sich die Variablen data.a und data.b denselben Speicher. Wir haben a den Wert 77 zugewiesen, aber wir können dieselben Bytes als Zeichen in b interpretieren.
Ausrichtung in Unions
Wie Strukturen verwenden auch Unions Ausrichtung und Auffüllung. Der Compiler kann zusätzliche Bytes hinzufügen, damit jedes Mitglied an der richtigen Speichergrenze beginnt.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Eine Union kann immer nur einen Wert gleichzeitig speichern, und ihre Größe entspricht der Größe ihres größten Mitglieds. Im Beispiel mit int a (4 Bytes), double b (8 Bytes) und char c[20] beträgt die Mindestgröße der Union 20 Bytes. Der Compiler kann jedoch zusätzliche Bytes für die Ausrichtung hinzufügen, sodass double oder int an der richtigen Speichergrenze beginnen. Daher kann sizeof(union Data) größer als 20 sein, zum Beispiel 24 Bytes.
Wischen, um mit dem Codieren zu beginnen
Die Union Data speichert jeden Wert als int und ermöglicht den Zugriff auf denselben Wert als char. Die Funktion soll über das Array iterieren und jeden Wert sowohl als Ganzzahl als auch als entsprechendes ASCII-Zeichen ausgeben.
Die Funktion akzeptiert zwei Parameter: ein Array von Ganzzahlen (values) und dessen Länge (n).
- Verwendung einer
union Datamit zwei Mitgliedern:int aundchar b. - In einer
for-Schleife werden die Array-Elemente von0bisndurchlaufen. - Das aktuelle Element des Arrays wird dem
int-Mitglied der Union (data.a) zugewiesen. - Die Ganzzahl
data.aund die Zeichenrepräsentationdata.bwerden ausgegeben.
Example
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen