
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!
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
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.
// 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.
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
| Fehler | Problem | Lösung |
|---|---|---|
| By Reference vergessen | Änderungen im Array bleiben – das Original wird immer geändert! | Bewusst einsetzen; const wenn kein Schreiben gewollt |
| sizeof in Funktion | sizeof(arr) gibt Pointer-Größe (8 Bytes), nicht Array-Größe zurück | Größe n immer als Parameter übergeben |
| Lokales Array zurückgeben | return 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:

Ändere die Array-Werte oder den Code und beobachte die Ausgabe. So lernt man Arrays am besten!
🎯 Wissens-Quiz
📋 Spickzettel
✅ 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