Unterschied zwischen Struktur und Union

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 11 Kann 2024
Anonim
Die Europäische Union einfach erklärt (explainity® Erklärvideo)
Video: Die Europäische Union einfach erklärt (explainity® Erklärvideo)

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.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Ähnlichkeiten
  5. Fazit

Vergleichstabelle

VergleichsbasisStrukturUnion
BasicDer separate Speicherort wird jedem Mitglied der Struktur zugewiesen.Alle Gewerkschaftsmitglieder teilen sich den gleichen Speicherort.
Erklärungstruct struct_name {
Typ element1;
Typ element2;
.
.
} variable1, variable2, ...;
union u_name {
Typ element1;
Typ element2;
.
.
} variable1, variable2, ...;
StichwortstructUnion
GrößeStrukturgröße = Summe der Größe aller Datenelemente.Gewerkschaftsgröße = Größe der größten Mitglieder.
Wert speichernSpeichert unterschiedliche Werte für alle Mitglieder.Speichert den gleichen Wert für alle Mitglieder.
Zu einer ZeitIn einer Struktur werden mehrere Werte der verschiedenen Elemente der Struktur gespeichert.Eine Gewerkschaft speichert jeweils einen Wert für alle Mitglieder.
BetrachtungsweiseBereitstellen einer einzelnen Möglichkeit zum Anzeigen der einzelnen Speicherorte.Geben Sie mehrere Möglichkeiten an, um denselben Speicherort anzuzeigen.
Anonymes FeatureKeine 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 <X; // 10

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.

  • Die Definition einer Union kann auch Konstruktor und Destruktor enthalten.
  • Die Vereinigung bietet mehrere Möglichkeiten, um denselben Speicherort anzuzeigen.
  • Die Union kann keine Klasse eines beliebigen Typs erben.
  • Die Gewerkschaft kann keine Basisklasse sein.
  • Die Gewerkschaft kann nicht die Funktion eines virtuellen Mitglieds haben.
  • Die Vereinigung kann keine statische Variable haben.
  1. Die Struktur verwendet unterschiedliche Speicherorte für unterschiedliche Mitglieder. Daher kann der eindeutige Wert allen Mitgliedern zugewiesen werden. Die Gewerkschaft teilt jedoch allen Mitgliedern denselben Speicherort zu. Daher kann allen Mitgliedern ein einziger Wert zugewiesen werden.
  2. Die Struktur hat unterschiedliche Speicherorte für alle Mitglieder. Daher kann es mehrere Werte gleichzeitig enthalten, und da wir wissen, dass die Union denselben Speicherort für alle Mitglieder hat, kann es auch jeweils einen einzelnen Wert speichern.
  3. Im Allgemeinen ist die Gesamtgröße der Struktur größer als die Gesamtgröße der Gewerkschaft, da die Größe einer Struktur die Summe der Größe aller Mitglieder der Strukturen und die Größe der Gewerkschaft die Größe des Mitglieds der Gewerkschaft ist größter Typ.
  4. Die Struktur bietet eine Einzelansicht jedes Standorts, während die Vereinigung mehrere Ansichten eines einzelnen Standorts bereitstellt.
  5. Sie können eine anonyme Vereinigung, aber keine anonyme Struktur deklarieren.

Ähnlichkeiten:

  • Sowohl die Struktur als auch die Vereinigung haben die gleiche Art, sich selbst zu deklarieren, Variablen zu erstellen und auf Mitglieder der Variablen zuzugreifen.
  • Sowohl Structure als auch union können mit den Methoden call by value und call by reference an eine Funktion übergeben werden.
  • Sowohl Structure als auch Union sind Container-Datentypen und enthalten ein Objekt eines beliebigen Datentyps, einschließlich anderer Strukturen, Unions und Arrays als Mitglieder.

Fazit:

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.