📘 Kapitel 5 · Arrays & Strings

Praktische
Anwendungen

Arrays & Funktionen · Bubble Sort · Suchen · Array of Strings

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

Jetzt setzen wir alles zusammen! Arrays an Funktionen übergeben, suchen, sortieren – das ist echte Programmierung. Kapitel 5 abschließen mit einem vollständigen Notenprogramm!

Arrays an Funktionen übergeben

Arrays werden als Zeiger übergeben

Die Funktion bekommt den Original-Array (keine Kopie). Größe muss als Parameter mitgegeben werden!

array_func.cC
float avg(int a[], int n) {
    int s=0;
    for(int i=0;i<n;i++) s+=a[i];
    return (float)s/n;
}
// Aufruf:
int noten[5]={1,3,2,1,4};
printf("%.2f\n", avg(noten, 5));  // 2.20

Bubble Sort

Sortieralgorithmus
void sort(int a[], int n) {
    for(int i=0;i<n-1;i++)
      for(int j=0;j<n-1-i;j++)
        if(a[j]>a[j+1]){{
          int t=a[j]; a[j]=a[j+1]; a[j+1]=t;
        }}

sizeof-Trick für Array-Größe

Innerhalb einer Funktion gibt sizeof(arr) nicht die Array-Größe zurück – sondern nur die Größe eines Pointers (8 Bytes auf 64-Bit-Systemen). Deshalb muss die Größe immer als Parameter mitgegeben werden.

sizeof_fehler.cC
// FALSCH: sizeof in der Funktion liefert Pointer-Größe!
void drucke_falsch(int arr[]) {
    int n = sizeof(arr) / sizeof(arr[0]); // 8/4 = 2, NICHT 5!
    for (int i=0; i<n; i++) printf("%d ", arr[i]);
}

// RICHTIG: Größe als Parameter übergeben
void drucke_richtig(int arr[], int n) {
    for (int i=0; i<n; i++) printf("%d ", arr[i]);
}

int main() {
    int zahlen[5] = {1,2,3,4,5};
    int n = sizeof(zahlen) / sizeof(zahlen[0]); // 5 – hier korrekt!
    drucke_richtig(zahlen, n);
}

⚠️ sizeof(arr) in Funktionen gibt Pointer-Größe zurück!

Sobald ein Array an eine Funktion übergeben wird, ist es nur noch ein Pointer. sizeof liefert dann 8 (64-Bit) oder 4 (32-Bit) Bytes – unabhängig von der Array-Größe. Immer n als Parameter mitgeben!

const für unveränderliche Arrays

Das Schlüsselwort const vor dem Array-Parameter verhindert, dass die Funktion das Original-Array versehentlich verändert. Der Compiler gibt dann eine Fehlermeldung wenn versucht wird zu schreiben.

const_array.cC
void drucke(const int arr[], int n) {
    // const: Funktion darf arr nicht verändern
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    // arr[0] = 99;  → Compilerfehler! const verletzt
}

float summe(const int a[], int n) {
    int s = 0;
    for (int i=0; i<n; i++) s += a[i];
    return s;
}

const als Sicherheitsnetz

Verwende const int arr[] immer dann, wenn die Funktion das Array nur lesen soll (z. B. drucken, suchen, summieren). Das macht den Code sicherer und dokumentiert die Absicht klar.

Häufige Fehler

FehlerProblemLösung
By Reference vergessenÄnderungen im Array bleiben – das Original wird immer geändert!Bewusst einsetzen; const wenn kein Schreiben gewollt
sizeof in Funktionsizeof(arr) gibt Pointer-Größe (8 Bytes), nicht Array-Größe zurückGröße n immer als Parameter übergeben
Lokales Array zurückgebenreturn arr; gibt Zeiger auf Stack-Speicher zurück – wird nach Funktionsende ungültig!Array als Parameter übergeben und dort befüllen lassen

⚡ Code-Simulator

Teste Array- und String-Operationen direkt im Browser:

C Simulator – Unit 25
▶ 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

Fragen werden geladen …

📋 Spickzettel

Arrays & Funktionen
void f(int a[],int n)Array-Parameter
f(arr, 5)Übergabe: nur Name
a[i] ändernOriginal wird geändert!
n = GrößeImmer mitgeben
Algorithmen
Bubble SortVergleiche + Tausch
SucheIndex zurück oder -1
Min/MaxStart mit a[0]
Durchschnittsumme/n

✅ Checkliste Unit 25

  • Ich kann Arrays an Funktionen übergeben
  • Ich verstehe dass Arrays als Zeiger übergeben werden
  • Ich kann Minimum, Maximum und Durchschnitt berechnen
  • Ich kenne den Bubble-Sort-Algorithmus