Programmiersprache C/C++

Datentyp struct

Strukturen (Records) fassen verschiedene Komponenten zusammen.
Im allgemeinen besitzen die Komponenten unterschiedliche Datentypen.

Meist besitzen Strukturen eine überschaubare Anzahl an Komponenten, die Anzahl ist jedoch nicht begrenzt.
Angesprochen werden Komponenten in der Form:

  strukturname.komponentname
                                                oder
  zeiger_auf_eine_struktur->komponentname
Siehe Komponent-Operatoren

Durch das Laufzeitsystem von C und C++ wird eine Vielzahl von Strukturen benutzt, deren Deklaration in Header-Dateien enthalten ist.

Zu unterscheiden ist bei der Deklaration

Komponenten (Elemente, Felder) einer Struktur können einen vordefinierten Datentyp besitzen, aber auch Zeiger auf Funktionen sowie Strukturtypen, Arrays, Unions und Bitfelder sein.

In C++ hat eine mit struct deklarierte Struktur dieselben Eigenschaften wie eine Klasse - wenn man davon absieht, daß die Komponenten derartiger Strukturen standardmäßig als public betrachtet werden.

Die Elementliste kann sowohl in C als auch in C++ eine beliebige Folge von Deklarationen enthalten, wobei es hier hinsichtlich der Komplexität und der verwendeten Daten- bzw. Funktionstypen keine Einschränkungen gegenüber globalen Deklarationen gibt.

Zusätzlich ist innerhalb von Strukturen die Deklaration von Bitfeldern möglich:

  integertyp [Bezeichner] : konstanter-Ausdruck

Beispiele:

  struct person {         /* deklariert den Strukturtyp person */
    int   alter;
    float gewicht;
    char  name[25];
  } adam, eva;            /* deklariert Variable des Typs person */

  struct person paul;     /* deklariert weitere Variable des Typs person */
  person paula;           /* Deklaration nur in C++ zulaessig bzw.
                             in C nach vorherigem typedef */

  paul.alter = 13;        /* Zuweisung von Werten an die */
  paul.gewicht = 47.8;    /* einzelnen Komponenten */
Beispiel:
  #include <stdio.h>
  
  int main(void)
  {
    struct person {
      char name[20];
      char vorname[20];
      int alter;
    } p1, p2;

    struct person pp = { "Krause", "Anton", 44 };

    printf("%s %s ist %d Jahre alt\n", pp.vorname, pp.name, pp.alter);

    strcpy(p1.name, "Meier");
    strcpy(p1.vorname, "Otto");
    p1.alter = 77;
  
    p2 = p1;
    printf("%s %s ist %d Jahre alt\n", p2.vorname, p2.name, p2.alter); 
  
    return 0;
  }

Strukturvariablen können bei ihrer Definition initialisiert werden.
Beispiel:

  struct point            /* deklariert den Strukturtyp point */
  {
    int x;
    int y;
  } pkt1 = { 20, 40 };    /* definiert die Variable pkt1 und initialisiert
                             ihre beiden Felder (x = 20, y = 40) */

  struct point pkt2 = { 10, 12 };
Eine Strukturvariable darf auf der linken Seite einer Zuweisung stehen.
Beispiel:
  struct point pkt1 = { 2, 3 };
  struct point pkt2;

  pkt2 = pkt1;

Beispiel für eine Struktur aus dem C-Laufzeitsystem (time.h):

  struct tm {
    int tm_sec,		/* seconds 0..59			*/
    tm_min,		/* minutes 0..59			*/
    tm_hour,		/* hour of day 0..23			*/
    tm_mday,		/* day of month 1..31			*/
    tm_mon,		/* month 0..11				*/
    tm_year,		/* years since 1900			*/
    tm_wday,		/* day of week, 0..6 (Sunday..Saturday) */
    tm_yday,		/* day of year, 0..365			*/
    tm_isdst;		/* >0 if daylight savings time		*/
			/* ==0 if not DST			*/
			/* <0 if don't know         		*/
  };

Beispiel für Funktionen, die einen Wert mit Strukturtyp zurückgeben:

  struct complx { 
    double re;
    double im;
  };

  struct complx init(double r, double i)
  {
    struct complx new;

    new.re = r;
    new.im = i;
    return new;
  }

  struct complx add(struct complx a, struct complx b)
  {
    struct complx c;

    c.re = a.re + b.re;
    c.im = a.im + b.im;
    return c;
  }

  struct complx mult(struct complx a, struct complx b)
  {
    struct complx c;

    c.re = a.re * b.re  -  a.im * b.im;
    c.im = a.re * b.im  +  a.im * b.re;
    return c;
  }

  void print(struct complx c)
  {
    printf("( %f , %f )\n", c.re, c.im);
  }
Siehe auch:
Beziehung struct - class in C++.


Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 15.02.1996