Beispiel

struct person
{
    char Vorname[80];
    char Nachname[80];
    int Geburtstag;
    MONAT Geburtsmonat;
    int Geburtsjahr;
};
 
int main()
{
    struct person person1;
 
    char Vorname[80] = "Arthur";
 
    person1.Geburtstag = 5;
    person1.Geburtsmonat = Februar;
    strncpy(person1.Vorname, Vorname, 80);
 
    return 0;
}

Wissenswert

Achtung: Pointer-Stern bindet nicht so gut wie der Punkt:

// Eher so:
(*p1).geburtstag = 1991;
// Oder auflösen durch Pfeil:
p1->geburtstag = 1991;

Typedef

typedef struct {
    char Vorname[80];
    int Geburtsjahr;
} person;
 
int main()
{
    person reg;
 
    reg.Geburtsjahr = 2003;
 
    return 0;
}

Im Speicher

short s;
int i;

Würde ohne optimierungen im Speicher z.B. so ausschauen:

Adr   Wert
 0   s s i i
 4   i i . .
 8   . . . .

Um i zu lesen müsste der Prozessor dann 2x auf den Speicher zugreifen: Ein mal für die erste Hälfte in Adresse 0 und für die zweite Hälfte in Adresse 2.

Deshalb erzeugt der Compiler Speicherlücken (Alignments):

Adr   Wert
 0   s s - -
 4   i i i i
 8   . . . .

Größe der structs: Abhängig von

  • Anzahl der Variablen
  • Typen der Variablen
  • Alignments

Verwandt: enum, typedef