D Programmierung - Gewerkschaften
EIN unionist ein in D verfügbarer spezieller Datentyp, mit dem Sie verschiedene Datentypen am selben Speicherort speichern können. Sie können eine Vereinigung mit vielen Mitgliedern definieren, aber es kann immer nur ein Mitglied einen Wert enthalten. Gewerkschaften bieten eine effiziente Möglichkeit, denselben Speicherort für mehrere Zwecke zu verwenden.
Eine Union definieren in D.
Um eine Union zu definieren, müssen Sie die Union-Anweisung auf sehr ähnliche Weise verwenden wie beim Definieren der Struktur. Die union-Anweisung definiert einen neuen Datentyp mit mehr als einem Mitglied für Ihr Programm. Das Format der Gewerkschaftserklärung lautet wie folgt:
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
Das union tagist optional und jede Mitgliedsdefinition ist eine normale Variablendefinition, wie z. B. int i; oder float f; oder eine andere gültige Variablendefinition. Am Ende der Union-Definition, vor dem letzten Semikolon, können Sie eine oder mehrere Union-Variablen angeben, dies ist jedoch optional. Hier ist die Art und Weise, wie Sie einen Vereinigungstyp namens Data definieren, der die drei Mitglieder hati, f, und str - -
union Data {
int i;
float f;
char str[20];
} data;
Eine Variable von Datatype kann eine Ganzzahl, eine Gleitkommazahl oder eine Zeichenfolge speichern. Dies bedeutet, dass eine einzelne Variable (derselbe Speicherort) zum Speichern mehrerer Datentypen verwendet werden kann. Sie können je nach Anforderung beliebige integrierte oder benutzerdefinierte Datentypen innerhalb einer Union verwenden.
Das von einer Gewerkschaft belegte Gedächtnis wird groß genug sein, um das größte Mitglied der Gewerkschaft aufzunehmen. Im obigen Beispiel belegt der Datentyp beispielsweise 20 Byte Speicherplatz, da dies der maximale Speicherplatz ist, der von einer Zeichenfolge belegt werden kann. Das folgende Beispiel zeigt die Gesamtspeichergröße, die von der obigen Vereinigung belegt wird -
import std.stdio;
union Data {
int i;
float f;
char str[20];
};
int main( ) {
Data data;
writeln( "Memory size occupied by data : ", data.sizeof);
return 0;
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Memory size occupied by data : 20
Zugang zu Gewerkschaftsmitgliedern
Um auf ein Gewerkschaftsmitglied zuzugreifen, verwenden wir die member access operator (.). Der Mitgliederzugriffsoperator wird als Punkt zwischen dem Namen der Gewerkschaftsvariablen und dem Gewerkschaftsmitglied codiert, auf das wir zugreifen möchten. Sie würden das Schlüsselwort union verwenden, um Variablen vom Typ union zu definieren.
Beispiel
Das folgende Beispiel erläutert die Verwendung von union -
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
data.i = 10;
data.f = 220.5;
data.str = "D Programming".dup;
writeln( "size of : ", data.sizeof);
writeln( "data.i : ", data.i);
writeln( "data.f : ", data.f);
writeln( "data.str : ", data.str);
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
size of : 16
data.i : 1917853764
data.f : 4.12236e+30
data.str : D Programming
Hier sehen Sie die Werte von i und f Mitglieder der Gewerkschaft wurden beschädigt, weil der der Variablen zugewiesene Endwert den Speicherort belegt hat und dies der Grund ist, warum der Wert von str Mitglied wird sehr gut gedruckt.
Schauen wir uns nun noch einmal dasselbe Beispiel an, in dem wir jeweils eine Variable verwenden, was der Hauptzweck der Vereinigung ist -
Modifiziertes Beispiel
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
writeln( "size of : ", data.sizeof);
data.i = 10;
writeln( "data.i : ", data.i);
data.f = 220.5;
writeln( "data.f : ", data.f);
data.str = "D Programming".dup;
writeln( "data.str : ", data.str);
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
size of : 16
data.i : 10
data.f : 220.5
data.str : D Programming
Hier werden alle Mitglieder sehr gut gedruckt, da jeweils ein Mitglied verwendet wird.