📘 Kapitel 5 · Arrays & Strings

Eindimensionale
Arrays

Mehrere Werte · Indexzugriff [i] · for-Schleifen · Grenzen

21 / 30 Units
Ömer
Kapitel 5: Arrays & Strings ~45 Min. Theorie + Simulator + Quiz + Spickzettel
Ömer
Ömer sagt:

Ein Array ist wie eine Reihe von Schubladen mit nummerierten Fächern. Jede Schublade fasst genau einen Wert – und du erreichst sie mit dem Index!

Array – Grundkonzept

Ein Array speichert mehrere Werte desselben Typs unter einem Namen. Indizes beginnen immer bei 0.

int noten[5] = {1, 3, 2, 1, 4}
[0]
[1]
[2]
[3]
[4]
1
3
2
1
4
noten[0]=1   noten[2]=2   noten[4]=4 (letztes: Index n-1)

Deklaration & Zugriff

arrays.cC
int n[5] = {1,3,2,1,4};   // Deklaration + Init
printf("%d\n", n[0]);           // Erstes Element: 1
printf("%d\n", n[4]);           // Letztes: 4
for(int i=0;i<5;i++) printf("%d ",n[i]);

⚠️ Index beginnt bei 0!

Letztes Element: arr[Größe - 1]. Zugriff auf arr[Größe] ist ein Bug – C prüft keine Grenzen!

Array-Operationen

Mit einer einfachen for-Schleife lassen sich Minimum, Maximum, Summe und Durchschnitt eines Arrays berechnen.

operationen.cC
int a[5] = {7, 2, 9, 4, 1};
int min = a[0], max = a[0], summe = 0;

for (int i = 0; i < 5; i++) {
    if (a[i] < min) min = a[i];  // Minimum suchen
    if (a[i] > max) max = a[i];  // Maximum suchen
    summe += a[i];                   // Summe aufaddieren
    printf("%d ", a[i]);             // Ausgeben
}
printf("\nMin: %d  Max: %d\n", min, max);
printf("Summe: %d  Schnitt: %.1f\n", summe, (float)summe / 5);
▶ Ausgabe
7 2 9 4 1 Min: 1 Max: 9 Summe: 23 Schnitt: 4.6

Wichtig: Mit a[0] starten

Minimum und Maximum müssen mit dem ersten Element initialisiert werden – nicht mit 0! Sonst stimmt das Ergebnis bei negativen Zahlen nicht.

Häufige Fehler

FehlerProblemRichtig
i <= nOff-by-one: greift auf arr[n] zu – Out-of-bounds!i < n
Falsche Konstanteint arr[5] aber Schleife bis 6Konstante definieren: #define N 5
Nicht initialisiertint arr[5]; enthält zufälligen Speicher (Garbage Values)int arr[5] = {0}; initialisiert mit 0
arr2 = arr1Arrays können nicht direkt kopiert werden – nur Pointer wird kopiertElement für Element in Schleife kopieren

⚠️ Garbage Values

Ein nicht initialisiertes Array enthält zufällige Werte aus dem Speicher. Immer initialisieren: int arr[5] = {0}; setzt alle Elemente auf 0.

sizeof – Array-Größe bestimmen

Der sizeof-Operator gibt die Byte-Größe eines Typs oder einer Variable zurück. Bei Arrays lässt sich damit die Elementanzahl berechnen:

sizeof_array.cC
int zahlen[5] = {10, 20, 30, 40, 50};
int n = sizeof(zahlen) / sizeof(zahlen[0]);  // 20 / 4 = 5
printf("Anzahl Elemente: %d\n", n);           // 5
printf("Bytes gesamt:    %zu\n", sizeof(zahlen)); // 20
▶ Ausgabe
Anzahl Elemente: 5 Bytes gesamt: 20
AusdruckErgebnisErklärung
sizeof(zahlen)20 Bytes5 Elemente × 4 Bytes pro int
sizeof(zahlen[0])4 BytesGröße eines einzelnen int
20 / 45Anzahl der Elemente

sizeof nur im selben Scope!

Dieser Trick funktioniert nur dort, wo das Array deklariert wurde. Innerhalb einer Funktion gibt sizeof(arr) nur die Pointer-Größe zurück – nicht die Array-Größe!

⚡ Code-Simulator

Teste Array- und String-Operationen direkt im Browser:

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

Ändere die Array-Werte oder den Code und beobachte die Ausgabe. So lernt man Arrays am besten!

🎯 Wissens-Quiz

Frage 1
Bei welchem Index beginnt ein C-Array?
A1
B0
C-1
DBeliebig
Frage 2
Wie lautet der letzte gültige Index eines Arrays der Größe n?
An
Bn+1
Cn-1
Dn/2
Frage 3
Was passiert bei Array-Index-Überschreitung?
ACompilerfehler
BUndefiniertes Verhalten / Absturz
CAutomatische Vergrößerung
D0 wird zurückgegeben
Frage 4
Wie deklariert man ein float-Array mit 10 Elementen?
Afloat arr(10);
Bfloat arr[10];
Cfloat[10] arr;
Darray float arr 10;
Frage 5
Welcher Code gibt alle Elemente von arr[5] aus?
Afor(i=1;i<=5;i++)
Bfor(i=0;i<5;i++) printf(arr[i])
Cfor(i=0;i<5;i++) printf("%d",arr[i])
Dprintf(arr)
Frage 6
Was ist der Index des letzten Elements in int arr[10]?
A10
B1
C0
D9
Frage 7
Was ergibt sizeof(arr)/sizeof(arr[0]) für int arr[5]?
A4
B5
C20
D1
Frage 8
Können Arrays in C mit = kopiert werden?
AJa, direkt mit arr2 = arr1
BJa, aber nur bei gleicher Größe
CNein, man muss elementweise kopieren oder memcpy verwenden
DJa, mit dem &-Operator

📋 Spickzettel

Array-Syntax
int a[5];Deklaration
int a[]={1,2,3};Init, Größe auto
a[0]Erstes Element
a[n-1]Letztes Element
Regeln
Index ab 0Nicht ab 1!
Typ muss gleichint, float etc.
Größe ist fixKeine dynamische Größe
for+ArrayKlassische Kombination

✅ Checkliste Unit 21

  • Ich kann ein Array deklarieren und initialisieren
  • Ich greife mit dem richtigen Index auf Elemente zu
  • Ich kann ein Array mit einer for-Schleife durchlaufen
  • Ich kenne die Off-by-One Gefahr beim Array-Index