📘 Kapitel 7 · Fortgeschrittene Konzepte

Strukturen
(structs)

Eigene Datentypen · typedef · Punkt-Operator · Array von structs

29 / 30 Units
Ömer
Unit 29 von 30 ~45 Min. Theorie + Simulator + Quiz + Spickzettel
Ömer
Ömer sagt:

structs sind benutzerdefinierte Datentypen – du kombinierst verschiedene Typen zu einem neuen. Eine Person hat Namen, Alter, Note – alles zusammen in einem struct Schueler!

struct – eigene Datentypen

struct.cC
typedef struct {
    char  name[30];
    int   alter;
    float schnitt;
} Schueler;

Schueler s = {"Oemer", 17, 1.8f};
printf("%s Ø%.1f\n", s.name, s.schnitt);

Zugriff mit dem Punkt-Operator (.)

variable.member – z.B. s.name, s.alter, s.schnitt

Array von structs

Array of Structs
Schueler klasse[3] = {{"Anna",16,2.3f},{{"Max",17,1.5f},...};
for(int i=0;i<3;i++)
  printf("%s\n", klasse[i].name);

typedef – kürzere Schreibweise

Ohne typedef muss man das Schlüsselwort struct bei jeder Variablendeklaration wiederholen. Mit typedef erstellt man einen Alias-Namen – kürzer und lesbarer.

typedef.cC
// Ohne typedef:
struct Punkt { int x; int y; };
struct Punkt p1;   // struct muss immer dastehen

// Mit typedef:
typedef struct { int x; int y; } Punkt;
Punkt p2;  // kürzer!

typedef ist Standard in C-Projekten

Fast alle professionellen C-Codebasen verwenden typedef struct. Der selbst gewählte Name (z.B. Punkt, Schueler, Kontakt) macht den Code selbsterklärend.

Struct-Member – Zugriff und Kopieren

Auf Struct-Member greift man mit dem Punkt-Operator . zu. Bei einem Pointer auf ein Struct verwendet man den Pfeil-Operator -> (Vorschau auf spätere Units). Anders als Arrays können Structs direkt mit = kopiert werden!

struct_copy.cC
Punkt a = {3, 4};
Punkt b = a;   // vollständige Kopie – funktioniert!
b.x = 10;      // ändert nur b, nicht a!
printf("a.x=%d  b.x=%d\n", a.x, b.x);
▶ Ausgabe
a.x=3 b.x=10
OperatorVerwendungBeispiel
.Direkte Struct-Variablep.x, s.name
->Pointer auf Structptr->x (= (*ptr).x)
=Vollständige Struct-KopiePunkt b = a;

Structs an Funktionen übergeben

Structs können wie einfache Typen an Funktionen übergeben werden – entweder als Wert (Kopie) oder als Pointer (effizient, Original veränderbar).

struct_func.cC
// By value: sichere Kopie, Original unberührt
void zeige(Punkt p) {
    printf("(%d,%d)\n", p.x, p.y);
}

// By pointer: effizient, kann Original verändern
void verschiebe(Punkt *p, int dx, int dy) {
    p->x += dx;  // -> statt . bei Pointer
    p->y += dy;
}

By value vs. by pointer

Bei kleinen Structs (2–3 Felder) ist by value gut. Bei großen Structs (viele Felder, z.B. 10+ Mitglieder) ist by pointer effizienter, da keine vollständige Kopie erzeugt wird. Als Faustregel: wenn die Funktion das Original verändern soll, immer Pointer verwenden.

Häufige Fehler

FehlerProblemRichtig
p.mitglied statt p->mitgliedCompilerfehler bei Pointer auf Structptr->x oder (*ptr).x
struct Punkt p ohne typedefOhne typedef muss struct immer dabei stehentypedef struct {...} Punkt; verwenden
Große Struct by valueJedes Mal eine teure vollständige KopiePointer übergeben: void f(Punkt *p)

⚡ Code-Simulator

Teste den Code direkt im Browser – printf-Ausgaben werden simuliert:

C Simulator – Unit 29
▶ Ausgabe
– Klicke AUSFÜHREN –
Ömer
Ömer sagt:

Experimentiere mit dem Code – das ist der beste Weg um Pointer und structs wirklich zu verstehen!

🎯 Wissens-Quiz

Frage 1
Was ist ein struct?
AEin Array von gleichen Typen
BEin benutzerdefinierter Typ aus verschiedenen Feldern
CEine Funktion
DEin Pointer-Typ
Frage 2
Wie greift man auf ein struct-Mitglied zu?
Astruct->member
Bstruct::member
Cstruct.member
Dstruct[member]
Frage 3
Was macht typedef bei structs?
AErstellt einen Alias-Namen
BKopiert das struct
CDeklariert einen Pointer
DNichts
Frage 4
Wie speichert man 10 Schueler-structs?
Astruct Schueler[10]
BSchueler klasse[10]
C10 × struct
Dint schueler[10]
Frage 5
Kann ein struct verschiedene Datentypen enthalten?
ANein, nur gleiche Typen
BJa, beliebige Kombination
CNur int und float
DNur Pointer
Frage 6
Wie greift man auf ein Struct-Member über einen Pointer zu?
AMit dem Punkt-Operator (.)
BMit dem Doppelpunkt-Operator (::)
CMit dem Pfeiloperator (->) statt .
DMit dem *-Operator allein
Frage 7
Können Structs in C mit = kopiert werden?
AJa, vollständige Kopie aller Member
BNein, man muss memcpy verwenden
CNur wenn das Struct kein Array enthält
DNein, Structs sind immer read-only
Frage 8
Was bewirkt typedef bei einer struct-Definition?
ADas Struct wird automatisch initialisiert
BDas Struct wird im Heap gespeichert
CAlle Member werden auf 0 gesetzt
DMan muss nicht mehr das Schlüsselwort struct vor den Typnamen schreiben

📋 Spickzettel

struct-Syntax
typedef struct{}Name;Definition mit typedef
Name s;Variable erstellen
s.feldZugriff mit Punkt
Name arr[n];Array von structs
Vergleich
ArrayGleiche Typen
structVerschiedene Typen
.Zugriffs-Operator
Schueler,Produkt,...Typische structs

✅ Checkliste Unit 29

  • Ich kann ein struct mit typedef definieren
  • Ich greife mit . auf struct-Mitglieder zu
  • Ich kann Arrays von structs erstellen und durchlaufen
  • Ich verstehe warum structs wichtig für Datenmodellierung sind