Vereinigungen
Eine Union ist ein benutzerdefinierter Datentyp in C, ähnlich wie eine Struktur. Der Hauptunterschied besteht darin, dass alle ihre Mitglieder denselben Speicherbereich nutzen. 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 für alle Mitglieder der Union im selben Speicherbereich. Das bedeutet, dass alle Mitglieder der Union dieselbe 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 sich bei einer Union die Felder in derselben Speicherzelle befinden, kann dieselbe Information auf unterschiedliche Weise verarbeitet werden:
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 Speicherbereich. Wir haben den Wert 77 an a 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 jeweils nur einen Wert speichern, und ihre Größe entspricht der Größe ihres größten Members. Im Beispiel mit int a (4 Byte), double b (8 Byte) und char c[20] beträgt die Mindestgröße der Union 20 Byte. Der Compiler kann jedoch zusätzliche Bytes für die Ausrichtung hinzufügen, damit double oder int an der richtigen Speichergrenze beginnen. Daher kann sizeof(union Data) größer als 20 sein, zum Beispiel 24 Byte.
Swipe to start coding
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.
Beispiel
{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
Can you explain more about how unions save memory compared to structs?
What are some practical examples where using a union is beneficial?
How does alignment and padding affect the size of a union?
Großartig!
Completion Rate verbessert auf 4.35
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 nutzen. 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 für alle Mitglieder der Union im selben Speicherbereich. Das bedeutet, dass alle Mitglieder der Union dieselbe 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 sich bei einer Union die Felder in derselben Speicherzelle befinden, kann dieselbe Information auf unterschiedliche Weise verarbeitet werden:
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 Speicherbereich. Wir haben den Wert 77 an a 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 jeweils nur einen Wert speichern, und ihre Größe entspricht der Größe ihres größten Members. Im Beispiel mit int a (4 Byte), double b (8 Byte) und char c[20] beträgt die Mindestgröße der Union 20 Byte. Der Compiler kann jedoch zusätzliche Bytes für die Ausrichtung hinzufügen, damit double oder int an der richtigen Speichergrenze beginnen. Daher kann sizeof(union Data) größer als 20 sein, zum Beispiel 24 Byte.
Swipe to start coding
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.
Beispiel
{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