struct <struct_bezeichner> { <Datendeklaration> }; |
erlaubt die Deklaration von Variablen diesen Typs
<struct_bezeichner> <var_bezeichner>; |
Beispiel: Wir deklarieren einen Datentyp zur Speicherung der persönlichen Daten eines Studenten. (siehe Ex520.cc)
// Structure { // new structure struct Student { long long int matrikel; int skz; char name[30], vorname[20]; }; // Variable of type Student Student arni,robbi; // Data input cout << endl << " Vorname : "; cin >> arni.vorname; ... robbi = arni; // complete copy cout << robbi.vorname << endl; } |
Die Zuweisung robbi = arni;
kopiert den kompletten Datensatz
von einer Variablen zur anderen.
Der Zugriff auf die Komponente vorname
der Variablen arni
(des Typs Student
) erfolgt über
arni.vorname
Abgespeichert werden die Daten in der Form
Abhängig von Compilereinstellungen bzw. -optionen können kleinere ungenutzte Speicherlücken zwischen den Komponenten im Speicher auftreten (Data Alignment für schnelleren Datenzugriff).
Die Struktur Student
kann leicht für Studenten, welche
mehrere Studienrichtungen belegen, erweitert werden.
(siehe Ex520b.cc)
{ const int MAX_SKZ=5; struct Student_Mult { long long int matrikel; int skz[MAX_SKZ]; int nskz; // number of studies char name[30], vorname[20]; }; // Variable of type Student Student arni,robbi; // Data input cout << endl << " Vorname : "; cin >> arni.vorname; ... robbi = arni; // complete copy cout << robbi.vorname << endl; } |
Die Struktur Student
enthält
bereits Felder als Komponenten. Andererseits können
diese Datentypen wiederum zu Feldern arrangiert werden.
(siehe Ex522.cc)
// Array of structures { struct Student // new structure { ... }; const int N = 20; int i; Student gruppe[N]; // Array // Init for (i = 0; i < N; i++) { cin >> gruppe[i].vorname; ... } ... } |
Strukturen können wiederum andere strukturierte Datentypen als Komponenten enthalten. (siehe Ex523.cc)
// Structures in structures { struct Point3D // simple structure { double x,y,z; }; struct Line3D // structure uses Point3D { Point3D p1,p2; }; Line3D line; // Declare variable // Init cout << "Anfangspkt.: "; cin >> line.p1.x >> line.p1.y >>line.p1.z; cout << " Endpkt.: "; cin >> line.p2.x >> line.p2.y >>line.p2.z; ... } |
In obigem Beispiel ist line.p2
eine Variable
vom Typ Point3D
, auf deren Daten wiederum mittels des
.
Operators zugegriffen werden kann.