Navigation

2.2.2 Strukturen

Die Deklaration reserviert keinen Speicherplatz, sondern legt lediglich die Typen der zu diesem Strukturtyp gehörenden Komponenten fest. Die Länge der Struktur ergibt sich nicht aus der Summe der Elementlängen (Alignment).

VERBATIM/b222b: 

struct datum heute, hochzeits_tag;             /* Definition */ 

Dadurch erfolgt die Definition der Variablenbezeichner heute und hochzeits_tag als Strukturinstanzen des Typs struct datum und damit auch die Speicherplatzvergabe.

Deklaration und Definition in einer Anweisung:

VERBATIM/b222c: 

struct datum {                /* Deklaration des Typs */
     short jahr; 
     char monat[4]; 
     short tag; 
} heute, feiertage[20];       /* Definition von Variablen dieses Typs */

Die letzte Vereinbarung definiert ein Feld mit 20 Elementen. Jedes Element ist eine Struktur des Typs datum.

Mit dem Operator . kann man auf einzelne Komponenten der Struktur zugreifen.
allg.: einfacher_ausdruck . bezeichner
einfacher_ausdruck ist ein Bezeichner für eine Strukturinstanz.

VERBATIM/b222d: 

heute.jahr = 1992; 
feiertage[i].tag=24;

C erlaubt die Verwendung gleicher Bezeichner für Strukturtyp, Strukturelemente und Variablenbezeichner:

VERBATIM/b222e: 

struct wert {         /* Deklaration eines Typs */
     char kennung; 
     int wert;        /* Deklaration Strukturelement */

} wert;               /* Definition einer Variable */

BEISPIELE/b222a.c: 

#include <stdio.h>

struct datum {
   short jahr;
   char monat[4];
   short tag;
} heute; 

main()                           /* Ausgabe: 9. Nov. 1989 */
{
   heute.jahr = 1989; 
   strcpy(heute.monat, "Nov");              /* 3 Zeichen! */
   printf("%d. %s. %d\n", heute.tag = 9, heute.monat,
                   heute.jahr);
}

BEISPIELE/b222b.c: 

#include <stdio.h>
#define MAX 20

struct person {
   char name[MAX];
   int alter;
};

main()                                   /* Strukturen */
{  
   int i=1;
   struct person person, pf[MAX];

   strcpy(person.name,"Maxi");
   person.alter=18;
   printf("%s ist %d Jahre\n",person.name, person.alter);
   while(i<MAX) pf[i++]=person;
   pf[6].alter+=6;
   pf[6].name[3]='\0';
   printf("%s ist %d Jahre\n",pf[6].name, pf[6].alter);
   printf("%s ist %d Jahre\n",&pf, pf[0].alter);
}                               /* pf[0] unbelegt ! */  

Navigation