Strukturen

Die Struktur definiert einen neuen Datentyp welcher Komponenten unterschiedlichen Typs vereint. Die Typdeklaration

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.

//	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

gesamtes Programm



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.

{
 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;
}

gesamtes Programm



Die Struktur Student enthält bereits Felder als Komponenten. Andererseits können diese Datentypen wiederum zu Feldern arrangiert werden.

//	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;
   ...
  }
 ...
}

gesamtes Programm



Strukturen können wiederum andere strukturierte Datentypen als Komponenten enthalten.

//	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;
 ...
}

gesamtes Programm

In obigem Beispiel ist line.p2 eine Variable vom Typ Point3D , auf deren Daten wiederum mittels des . Operators zugegriffen werden kann.



Übungsaufgaben

Ex1: Erstelle eine Struktur zur Ein- und Ausgabe von Adressen

Lösung