📘 Kapitel 5 · Arrays & Strings

Mehrdimensionale
Arrays

Tabellen im Speicher · [zeile][spalte] · Verschachtelte Schleifen

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

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]

matrix.cC
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.

matrix_init.cC
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])
PositionIndexWert
Oben linksm[0][0]1
Oben rechtsm[0][3]4
Unten linksm[2][0]9
Unten rechtsm[2][3]12

Speicherlayout

2D-Arrays werden im Speicher zeilenweise (row-major order) abgelegt – alle Elemente hintereinander, Zeile für Zeile.

Speicherposition012345
Elementm[0][0]m[0][1]m[0][2]m[1][0]m[1][1]m[1][2]
Wert123456

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

AnwendungDeklarationBedeutung
Noten-Tabelleint noten[30][5]30 Schüler, 5 Fächer
Tic-Tac-Toechar feld[3][3]3×3 Spielfeld
Bild (Full HD)int pixel[1080][1920]Helligkeit pro Pixel
Schulstundenplanchar stunden[5][8][20]5 Tage, 8 Stunden, Fachname
tictactoe.cC
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");
}
▶ Ausgabe
X O X O X O O X X

Häufige Fehler

FehlerProblemLösung
m[spalte][zeile]Zeilen und Spalten vertauscht – falsche WerteImmer m[zeile][spalte]
Nur 1 Schleifefor(i=0; i<N*M; i++) – Index stimmt nichtImmer zwei verschachtelte Schleifen verwenden
void f(int m[][])Compiler kennt Speicherlayout nichtvoid 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:

C Simulator – Unit 22
▶ 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 lautet der Zugriff auf Zeile 2, Spalte 3 (0-basiert)?
Am[3][2]
Bm[2][3]
Cm[1][2]
Dm[2][1]
Frage 2
Wieviele Elemente hat int m[4][5]?
A9
B20
C45
D15
Frage 3
Welche Schleife iteriert über die Zeilen eines 2D-Arrays?
AInnere for-Schleife
BÄußere for-Schleife
Cwhile-Schleife
Ddo-while
Frage 4
Was ist die korrekte Initialisierung?
Aint m[2][2]={1,2,3,4};
Bint m[2][2]={{1,2},{3,4}};
Cint m=[2][2]{{1,2},{3,4}};
DBeide A und B
Frage 5
Was gibt m[0][0] einer Matrix int m[3][3]={{1,2,3},...} aus?
A0
B1
C3
DFehler
Frage 6
Wie viele Elemente hat int m[3][4]?
A7
B3
C12
D4
Frage 7
Was ist Row-Major-Order?
A2D-Arrays werden zeilenweise im Speicher abgelegt
B2D-Arrays werden spaltenweise im Speicher abgelegt
CDie erste Zeile hat Vorrang bei Zugriffen
DEin spezieller Sortieralgorithmus für Matrizen
Frage 8
Welche Schleife iteriert über die Spalten eines 2D-Arrays?
ADie äußere for-Schleife
BEine while-Schleife
CDie innere for-Schleife
DEine do-while-Schleife

📋 Spickzettel

2D-Array
int m[Z][S]Deklaration
m[z][s]Zugriff Zeile z, Spalte s
for z: for s:Durchlaufen
{{R0},{R1},...}Initialisierung
Tipps
Z×S ElementeGesamtanzahl
Äußere=ZeilenInnere=Spalten
%4dFormatiert ausgeben
m[0][S-1]Letztes in Zeile 0

✅ 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