next up previous contents index
Nächste Seite: 5.3 Union Aufwärts: 5. Strukturierte Datentypen Vorherige Seite: 5.1.2 Mehrdimensionale Felder   Inhalt   Index


5.2 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. (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

\begin{center}\vbox{\input{kap520.pstex_t}
}\end{center}

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.


next up previous contents index
Nächste Seite: 5.3 Union Aufwärts: 5. Strukturierte Datentypen Vorherige Seite: 5.1.2 Mehrdimensionale Felder   Inhalt   Index
Gundolf Haase 2004-01-15