
Ein 2D-Array ist eine Tabelle im Speicher: Zeilen und Spalten. Denk an Noten-Übersichten, Spielfelder oder Pixel-Bilder!
2D-Array – Tabellenstruktur
Syntax: typ name[Zeilen][Spalten] – Zugriff: name[z][s]
int m[2][3] = {{1,2,3},{{4,5,6}}; for(int z=0;z<2;z++){{ for(int s=0;s<3;s++) printf("%3d",m[z][s]); printf("\n"); }}
Äußere Schleife = Zeilen, Innere = Spalten
Immer: for(zeile) {{ for(spalte) {{ matrix[zeile][spalte] }} }}
Deklaration und Initialisierung
int m[3][4] deklariert eine Matrix mit 3 Zeilen und 4 Spalten – insgesamt 12 Elemente. Der erste Index ist die Zeile, der zweite die Spalte.
int m[3][4] = { {1, 2, 3, 4}, // Zeile 0 {5, 6, 7, 8}, // Zeile 1 {9, 10, 11, 12} // Zeile 2 }; // m[0][0] = 1 (oben links) // m[2][3] = 12 (unten rechts = m[Zeilen-1][Spalten-1])
| Position | Index | Wert |
|---|---|---|
| Oben links | m[0][0] | 1 |
| Oben rechts | m[0][3] | 4 |
| Unten links | m[2][0] | 9 |
| Unten rechts | m[2][3] | 12 |
Speicherlayout
2D-Arrays werden im Speicher zeilenweise (row-major order) abgelegt – alle Elemente hintereinander, Zeile für Zeile.
| Speicherposition | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| Element | m[0][0] | m[0][1] | m[0][2] | m[1][0] | m[1][1] | m[1][2] |
| Wert | 1 | 2 | 3 | 4 | 5 | 6 |
Row-Major Order
Zuerst kommen alle Spalten von Zeile 0, dann alle von Zeile 1 usw. Dies ist wichtig beim Übergeben von 2D-Arrays an Funktionen – die Spaltenanzahl muss angegeben werden.
Typische Anwendungen
| Anwendung | Deklaration | Bedeutung |
|---|---|---|
| Noten-Tabelle | int noten[30][5] | 30 Schüler, 5 Fächer |
| Tic-Tac-Toe | char feld[3][3] | 3×3 Spielfeld |
| Bild (Full HD) | int pixel[1080][1920] | Helligkeit pro Pixel |
| Schulstundenplan | char stunden[5][8][20] | 5 Tage, 8 Stunden, Fachname |
char feld[3][3] = { {'X', 'O', 'X'}, {'O', 'X', 'O'}, {'O', 'X', 'X'} }; for (int z=0; z<3; z++) { for (int s=0; s<3; s++) printf("%c ", feld[z][s]); printf("\n"); }
Häufige Fehler
| Fehler | Problem | Lösung |
|---|---|---|
| m[spalte][zeile] | Zeilen und Spalten vertauscht – falsche Werte | Immer m[zeile][spalte] |
| Nur 1 Schleife | for(i=0; i<N*M; i++) – Index stimmt nicht | Immer zwei verschachtelte Schleifen verwenden |
| void f(int m[][]) | Compiler kennt Speicherlayout nicht | void f(int m[][4], int zeilen) – Spaltenanzahl angeben |
⚠️ 2D-Array an Funktion übergeben
Bei der Übergabe an eine Funktion muss immer die Spaltenanzahl angegeben werden: void f(int m[][4], int zeilen). Nur die erste Dimension darf weggelassen werden.
⚡ 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 22
- Ich kann ein 2D-Array deklarieren und initialisieren
- Ich greife mit [zeile][spalte] auf Elemente zu
- Ich durchlaufe eine Matrix mit verschachtelten for-Schleifen
- Ich kann Zeilen- und Spaltensummen berechnen