Mit Arrays spei­cherst du in C zu­sam­men­ge­hö­ri­ge Daten effizient ab, ohne unzählige Variablen de­fi­nie­ren zu müssen. Meistens sind Arrays ein­di­men­sio­nal, sie lassen sich aber beliebig erweitern. Wir zeigen dir, wie du 2D-Arrays in C erstellst und sie geschickt für deine Projekte nutzt.

Grund­la­gen zu Arrays in C

Um 2D-Arrays in C sicher zu be­herr­schen, hilft ein Blick auf die Basis der Pro­gram­mier­spra­che C. Wie in vielen Sprachen sind Arrays ein Spei­cher­block für mehrere Werte desselben Typs. So bündelst du Daten unter einem einzigen Namen. Die Größe des Arrays legst du beim Kom­pi­lie­ren fest – sie bleibt danach fix. So de­kla­rierst du Arrays in C:

int zahlen1[15];
// Optional können die gespeicherten Werte schon beim Anlegen angegeben werden:
int zahlen2[5] = {1, 2, 3, 4, 5};
c

Im Beispiel steht der Datentyp wie gewohnt vor dem Namen. Die eckigen Klammern si­gna­li­sie­ren dem Compiler, dass es sich um ein Array handelt. Die Zahl darin bestimmt die Kapazität. Das Array zahlen1 wird im Beispiel un­in­itia­li­siert erstellt, ist also vorerst leer. Du kannst es später im Pro­gramm­ver­lauf befüllen.

Das Array zahlen2 wird hingegen sofort manuell in­itia­li­siert. Bei großen Da­ten­men­gen ist das jedoch mühsam und macht den Code un­über­sicht­lich. Besser ist es, Arrays pro­gram­ma­tisch zu füllen, zum Beispiel mit einer For-Schleife:

zahlen2[100];
for(int i = 0; i < 100; i++) {
zahlen2[i] = i + 1;
}
// Erzeugt ein Array, das die Ganzzahlen 1 bis 100 enthält.
c
Hinweis

Abhängig von Be­triebs­sys­tem, C-Standard und De­kla­ra­ti­ons­ort können un­in­itia­li­sier­te Variablen Zu­falls­wer­te enthalten. Das gilt auch für Arrays. Greife daher nicht auf Felder zu, die du noch nicht definiert hast – besonders, wenn der Inhalt als Pointer dienen soll.

Nach der Er­stel­lung greifst du über den Index auf die Werte zu. Denk daran: Arrays starten immer bei Index 0. Hier ein Beispiel zur Ver­an­schau­li­chung:

int zahlen2[5] = {1, 2, 3, 4, 5};
zahlen2[3] = zahlen2[2];
printf("%d\n", zahlen2[3]);
// Ausgabe: 3
c

Ein 2D-Array rea­li­sierst du in C, indem du ein Array erstellst, in dem jedes Feld selbst wieder ein Array ist. Erfahre jetzt, wie das genau funk­tio­niert.

2D-Arrays in C: So geht’s

Zwei­di­men­sio­na­le Arrays in C sind im Grunde ver­schach­tel­te ein­di­men­sio­na­le Arrays. Du kannst sie dir wie eine Tabelle oder Matrix vor­stel­len. Nutze folgende Syntax für die Er­stel­lung und Befüllung:

2d_ints[10][10];
2d_ints[0][1] = 0;
2d_ints[2][1] = 2;
2d_ints[9][4] = 36;
// usw.
c

Die linke Klammer steht für den Index im Haupt-Array, die rechte für den Index im darin liegenden Array. Betrachte diese Werte einfach als Ko­or­di­na­ten oder Zeilen und Spalten. Auch 2D-Arrays lassen sich direkt beim Anlegen in­itia­li­sie­ren.

2d_floats[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284}
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
}
c

Dieses Prinzip der Ver­schach­te­lung lässt sich unendlich fort­set­zen. So erstellst du Arrays mit beliebig vielen Di­men­sio­nen für komplexe Da­ten­struk­tu­ren.

int 4d_ints[10][10][10][10]
c

Ein­satz­ge­bie­te von 2D-Arrays in C

Über 2D-Arrays iterieren

Meistens nutzt man 2D-Arrays in C für mehr­di­men­sio­na­le Struk­tu­ren. Im folgenden Beispiel befüllen wir ein Array ab­wech­selnd mit Nullen und Einsen, um ein klas­si­sches Schach­brett­mus­ter zu erzeugen:

#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
    int schachbrett[8][8];
    for(int i = 0; i < ARRAY_LENGTH; i++) {
        for(int j = 0; j < ARRAY_LENGTH; j++) {
            schachbrett[i][j] = (i + j) % 2;
            printf("%d", schachbrett[i][j]);
        }
        printf("\n");
    }
    return 0;
}
/*
Ausgabe:
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/
c

Ein Array aus Strings

Für den Profi-Einsatz wichtig: Ein Array ist technisch gesehen nur ein Pointer auf eine Spei­cher­adres­se. Der Index gibt lediglich an, wie weit du dich relativ zur Ba­sis­adres­se im Speicher bewegst. Das ver­deut­licht dieses Beispiel:

int zahlen2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *zahlen2);
// Ausgabe: 1
printf("%d\n", *(zahlen2 + 2));
// Ausgabe: 3
c

In C funk­tio­nie­ren Strings nach demselben Prinzip. Du kannst daher über einen String iterieren wie über ein Array. Das folgende Beispiel zeigt drei Sätze in einem Array, die wir Zeichen für Zeichen in Groß­buch­sta­ben umwandeln. Den Zugriff steuern wir über den Array-Index (eckige Klammern):

#include <stdio.h>
int main() {
    char* saetze[3];
    saetze[0] = "Hallo, dies ist der erste Satz.\n";
    saetze[1] = "Dies ist nur der zweite Satz.\n";
    saetze[2] = "Und jetzt sind es drei.\n";
    printf("Originale Sätze:\n\n");
    for(int i = 0; i < 3; i++) {
        printf("%s", saetze[i]);
    }
    printf("\nVeränderte Sätze:\n\n");
    for(int i = 0; i < 3; i++) {
        int j = 0;
        while(saetze[i][j] != '\n') {
            if(saetze[i][j] >= 'a' && saetze[i][j] <= 'z') {
                printf("%c", saetze[i][j] - 0x20);
            } else {
                printf("%c", saetze[i][j]);
            }
            j++;
        }
        printf("\n");
    }
}
/*
Ausgabe:
Originale Sätze:
Hallo, dies ist der erste Satz.
Dies ist nur der zweite Satz.
Und jetzt sind es drei.
Veränderte Sätze:
HALLO, DIES IST DER ERSTE SATZ.
DIES IST NUR DER ZWEITE SATZ.
UND JETZT SIND ES DREI.
*/
c
Zum Hauptmenü