Unterschied zwischen Struktur und Union
Inhalt
C ++ ermöglicht alle fünf Möglichkeiten, die die C-Sprache zum Erstellen benutzerdefinierter Daten bietet. Diese fünf Möglichkeiten sind "Struktur", "Bitfeld", "Vereinigung", "Aufzählung", "typedef". In dem folgenden Artikel werden wir den Unterschied zwischen Struktur und Vereinigung untersuchen. Sowohl die Struktur als auch die Vereinigung sind die Container-Datentypen, die Daten eines beliebigen „Typs“ enthalten können. Der wesentliche Unterschied zwischen Struktur und Gewerkschaft besteht darin, dass die Struktur für jedes ihrer Mitglieder einen eigenen Speicherort hat, während sich die Mitglieder einer Gewerkschaft denselben Speicherort teilen.
Lassen Sie uns den Unterschied zwischen Struktur und Vereinigung zusammen mit einer Vergleichstabelle verstehen.
- Vergleichstabelle
- Definition
- Hauptunterschiede
- Ähnlichkeiten
- Fazit
Vergleichstabelle
Vergleichsbasis | Struktur | Union |
---|---|---|
Basic | Der separate Speicherort wird jedem Mitglied der Struktur zugewiesen. | Alle Gewerkschaftsmitglieder teilen sich den gleichen Speicherort. |
Erklärung | struct struct_name { Typ element1; Typ element2; . . } variable1, variable2, ...; | union u_name { Typ element1; Typ element2; . . } variable1, variable2, ...; |
Stichwort | struct | Union |
Größe | Strukturgröße = Summe der Größe aller Datenelemente. | Gewerkschaftsgröße = Größe der größten Mitglieder. |
Wert speichern | Speichert unterschiedliche Werte für alle Mitglieder. | Speichert den gleichen Wert für alle Mitglieder. |
Zu einer Zeit | In einer Struktur werden mehrere Werte der verschiedenen Elemente der Struktur gespeichert. | Eine Gewerkschaft speichert jeweils einen Wert für alle Mitglieder. |
Betrachtungsweise | Bereitstellen einer einzelnen Möglichkeit zum Anzeigen der einzelnen Speicherorte. | Geben Sie mehrere Möglichkeiten an, um denselben Speicherort anzuzeigen. |
Anonymes Feature | Keine anonyme Funktion. | Eine anonyme Vereinigung kann erklärt werden. |
Definition der Struktur
Die Struktur ist eine Sammlung von Variablen verschiedener Datentypen, auf die mit einem gemeinsamen Namen verwiesen wird. Die Variablen in einer Struktur heißen "Mitglieder". Standardmäßig sind alle Mitglieder einer Struktur "öffentlich". Wenn Sie eine Struktur deklarieren, erstellen Sie eine Vorlage, mit der Strukturobjekte erstellt werden können, die dieselbe Organisation von Datenelementen und Elementfunktionen aufweisen. Der Deklaration der Struktur geht immer das Schlüsselwort „struct“ voraus, das dem Compiler mitteilt, dass eine Struktur deklariert wurde. Nehmen wir ein Beispiel.
Nehmen wir ein Beispiel.
struct employee {string name; string company_name; Zeichenfolge Stadt; } emp1, emp2;
Hier deklarieren wir eine Struktur zum Speichern der Informationen der Mitarbeiter. Die Deklaration wird durch ein Semikolon abgeschlossen, da die Strukturdeklaration eine Anweisung ist, und in C ++ wird die Anweisung durch ein Semikolon abgeschlossen.
Der Name einer Struktur definiert einen „Typ“ (im obigen Beispiel lautet der Name der Struktur „Mitarbeiter“). Die Variablen dieser Typen können wie oben beschrieben erstellt werden. Wir haben zwei Variablen "emp1" und "emp2" vom Typ "employee" erstellt. Im obigen Beispiel haben wir direkt nach der Deklaration eine 'Struktur'-Variable erstellt. alternativ könnte es auch separat erstellt werden.
Struktur Mitarbeiter emp1, emp2; // Das Schlüsselwort struct ist nicht obligatorisch.
Die Elemente einer Strukturvariablen können initialisiert werden oder mit dem Punktoperator (.) Aufgerufen werden.
emp1.name = "ashok";
Die in einer Strukturvariablen enthaltenen Informationen können wie folgt einer anderen Strukturvariablen desselben Typs zugewiesen werden.
emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // Zuweisen von Werten des Mitglieds von emp1 zu emp2. cout <
Hier haben wir die Strukturvariable "emp1" zu "emp2" zugewiesen, also kopiert "emp1" den gesamten Wert seiner Mitglieder in das entsprechende Mitglied von "epm2".
Das Mitglied der Strukturvariablen kann an die Funktion übergeben werden.
funct (emp1.city);
Die gesamte Strukturvariable kann sowohl mit den Methoden call by value als auch call by reference an die Funktion übergeben werden.
funt (emp1); // Funktion durch Aufruf nach Wertmethode aufrufen. . . void funct (struct employee emp) {// empfangswerte von mitgliedern von emp1. cout <
Hier wird die Änderung des Werts eines Elements der Strukturvariablen nicht außerhalb der Funktion wiedergegeben, da eine Variable per Call-by-Value-Methode übergeben wird. Jetzt machen wir dasselbe per Call-by-Reference-Methode.
funt (& emp1); // Funktion per Aufruf per Referenzmethode aufrufen. . . Ungültige Funktion (struct employee * emp) {// empfangende Adresse von emp1. emp-> city = "Nur"; // Ändere den Wert des Mitglieds (Stadt) der Strukturvariablen emp1. . }
Hier wird die Strukturvariable als Referenz übergeben, so dass eine Änderung des Wertes von Elementen der Strukturvariablen auch außerhalb der Funktion wiedergegeben wird.
srtuct employee * emp; // Den Strukturzeiger des Typs employee dekalieren. emp = & emp1; // die adresse von emp1 dem zeiger zuweisen. emp-> city // Zeiger, der auf die Mitgliedsstadt von emp1 zugreift.
Der Zeiger auf die Struktur kann ebenfalls erstellt werden. Es enthält die Adresse der Strukturvariablen.
In der Struktur ist die Aggregatinitialisierung zulässig, wenn die Strukturdefinition keinen benutzerdefinierten Konstruktor oder virtuelle Funktionen oder eine Basisklasse oder ein privates oder geschütztes Feld enthält.
int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Möglich, da die Struktur des Mitarbeiters keine der oben genannten Dinge enthält.
Definition von Union
Eine Union ist ein Speicherort, der von zwei oder mehr verschiedenen Variablentypen gemeinsam genutzt wird, die unter einem einzelnen Unionstyp deklariert sind. Das Schlüsselwort, mit dem eine Union deklariert wird, lautet "union". In C ++ kann eine Union sowohl Elementfunktionen als auch Variablen enthalten. Standardmäßig sind alle Gewerkschaftsmitglieder "öffentlich". Die Deklaration der „Union“ ähnelt der Deklaration der Struktur.
union u_type {int x, char c; float f; } u1, u2;
Hier hatten wir eine Union namens u_type deklariert. Die Mitglieder des u_type sind "x" vom Integer-Typ, "c" vom Zeichentyp und "f" vom Float-Typ. Wir haben auch die Union-Variablen "u1" und "u2" vom Typ "u_type" direkt nach der Deklaration einer Union erstellt. Wir können die Union-Variable auch separat von der Deklaration einer Union deklarieren.
int main () {union u_type u1, u2; // Die Schlüsselwortunion ist in C ++ nicht obligatorisch. }
Der Zugriff auf Gewerkschaftsmitglieder kann mithilfe des Punkt-Operators (.) Erfolgen, dem die Gewerkschaftsvariable vorangestellt und das Mitglied dieser Variablen gefolgt ist.
u1.x = 10;
Wie bei Strukturen ist die aggregierte Initialisierung in einer Union nicht möglich. Wie wir wissen, teilt sich die Union für alle Mitglieder gleichzeitig den gleichen Speicherort. Es wird nur eine Variable initialisiert und alle Variablen werden automatisch mit dem initialisierten Wert aktualisiert.
u1.x = 10; cout <
Wenn Sie versuchen, den Wert eines Mitglieds von "u1" zu ändern. Das andere Mitglied wird automatisch auf diesen Wert aktualisiert.
u1.c = 65; cout <
Der der Gewerkschaft zugewiesene Raum entspricht der Größe des größten Gewerkschaftsmitglieds. Da das für "char" zugewiesene Byte 1 Byte, "int" 4 Byte und "float" 4 Byte ist, beträgt die größte Größe 4 Byte. Der für "u1" und "u2" zugewiesene Speicher beträgt 4 Byte.
int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4
Der Zeiger auf die Union kann genauso wie in der Struktur erstellt werden. Der Zeiger enthält die Adresse der Union.
union u_type * un; un = & u1; cout < Wie die Struktur kann die Vereinigung auch durch beide Methoden, d. H. Aufruf nach Wert und Aufruf nach Referenz, an die Funktionen übergeben werden. Funktion (u1); // Funktion durch Aufruf nach Wertmethode aufrufen. . . void funct (union u_type un) {// Erhalte den Wert des Mitglieds von u1. cout < Rufen wir nun die Funktion mit der Call-by-Reference-Methode auf. Funktion (& u1); // Funktion per Aufruf per Referenzmethode aufrufen. . . void funct (union u_type un) {// erhalte die adresse von u1. un-> x = 20. } In C ++ gibt es eine spezielle Art von Union, die als anonyme Union bezeichnet wird. Die anonyme Union kann nicht den Typnamen haben und es kann keine Variable einer solchen Union erstellt werden. Es dient nur dazu, dem Compiler mitzuteilen, dass seine Mitgliedsvariablen denselben Speicherort haben sollen. Die Variable einer anonymen Union kann ohne den normalen Punktoperator (.) Referenziert werden. int main () {union {// definiere anonyme Union ohne den Typnamen. int x, char c; float f; }; x = 10; // verwies auf die Vereinigungsvariable ohne Punktoperator cout < In anonymen Verbänden sind keine Mitgliedsfunktionen zulässig. Sie dürfen keine privaten oder geschützten Daten enthalten. Die globale anonyme Verbindung muss als "statisch" angegeben werden. Die Punkte, die für die normale Gewerkschaftserklärung zu beachten sind. Sowohl Struktur als auch Vereinigung sind der Container-Datentyp, der die Member verschiedener Typen enthält. Strukturen werden jedoch verwendet, wenn wir einen bestimmten Wert für alle Mitglieder an einem bestimmten Speicherort speichern müssen. Die Gewerkschaften werden verwendet, wenn eine Typkonvertierung erforderlich ist.
Ähnlichkeiten:
Fazit: