📘 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

Frage 1
Wie übergibt man ein Array an eine Funktion?
Aint a[5] als Parameter
BNur den Array-Namen (wird als Zeiger übergeben)
CJedes Element einzeln
DMit strcpy
Frage 2
Warum muss man die Array-Größe extra übergeben?
APflicht in C
BInnerhalb der Funktion kennt man die Größe nicht automatisch
CFür bessere Performance
DIst nicht nötig
Frage 3
Was macht Bubble Sort?
ASortiert Blasen
BSortiert durch benachbarte Vergleiche und Tausch
CSucht das Maximum
DDreht das Array um
Frage 4
Wie deklariert man ein Array von 5 Strings (je max. 20 Zeichen)?
Achar s[5];
Bchar s[5][20];
Cstring s[5];
Dchar[20] s[5];
Frage 5
Was macht eine Suche-Funktion wenn der Wert nicht gefunden wird?
A0 zurückgeben
BArray-Größe zurückgeben
C-1 zurückgeben (Konvention)
DFehler ausgeben
Frage 6
Warum kann sizeof(arr) in einer Funktion die Array-Größe nicht bestimmen?
Asizeof ist in Funktionen nicht erlaubt
Barr ist dort ein Pointer, sizeof gibt Pointer-Größe zurück
CDie Array-Größe wird automatisch auf 0 gesetzt
Dsizeof funktioniert nur mit int
Frage 7
Was bedeutet const int arr[] als Funktionsparameter?
ADas Array hat eine feste Größe
BDas Array wird kopiert
CDie Funktion darf das Array nicht verändern
DDas Array ist global sichtbar
Frage 8
Was ist Bubble Sort?
AAlgorithmus der benachbarte Elemente vergleicht und tauscht bis das Array sortiert ist
BEin Algorithmus der immer das Minimum sucht
CEin rekursiver Sortieralgorithmus
DEine Funktion aus stdlib.h

📋 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