2D Arrays in C

Mit Arrays können Sie in C einen Satz von zueinander gehörenden Daten speichern, ohne mehrere Variablen anlegen zu müssen. In der Regel sind Arrays eindimensional, lassen sich jedoch um beliebig viele Dimensionen erweitern. Wir zeigen Ihnen, wie Sie 2D Arrays in C anlegen und effektiv nutzen können.

Grundlegendes zu Arrays in C

Um 2D Arrays in C effektiv anlegen und beherrschen zu können, sollte man zuerst einige grundlegende Dinge über Arrays in der Programmiersprache C wissen. Wie in vielen anderen Sprachen handelt es sich bei Arrays um einen Speicherblock, in dem mehrere Werte desselben Datentyps gespeichert werden können. So lassen sich mehrere Werte unter einem Variablennamen speichern und zusammenfassen. Die Größe des Arrays muss zur Kompilierzeit bekannt sein und kann nicht nachträglich geändert werden. Folgender Codeblock zeigt, wie man Arrays in C anlegt:

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

In diesem Beispiel wird der Typ der zu speichernden Daten wie gewohnt vor dem Variablennamen angegeben. Die eckigen Klammern sagen aus, dass es sich bei dieser Variable nicht um einen einzelnen Wert, sondern um ein Array handelt. Die Ganzzahl zwischen den Klammern gibt an, wie viele Elemente dieses Datentyps im Array gespeichert werden können. Das Array zahlen1 wird im obigen Beispiel uninitialisiert angelegt – das heißt, dass keine Werte in den Feldern geschrieben werden. Diese können dann später im Code mit Werten befüllt werden.

Das Array zahlen2 wird dahingegen schon beim Anlegen manuell initialisiert. Dieser Ansatz ist in den meisten Fällen nicht zu empfehlen, da er bei größeren Arrays sehr aufwendig und der daraus entstehende Code oft nicht leserlich ist. Versuchen Sie also lieber, Ihre Arrays programmatisch zu befü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

Je nachdem, auf welchem Betriebssystem Sie arbeiten, welchen C-Standard Sie nutzen und wo in Ihrem Programm Sie eine uninitialisierte Variable deklariert haben, kann in dieser Variable ein zufälliger Wert stehen. Dies gilt auch für Array-Felder. Greifen Sie also am besten nicht auf Felder zu, die Sie noch nicht initialisiert haben, vor allem wenn der darin gespeicherte Wert als Pointer interpretiert werden soll.

Nachdem ein Array angelegt wurde, kann mit dem Index auf individuelle Werte zugegriffen werden. Beachten Sie, dass Arrays mit dem Index 0 anfangen. Folgendes Beispiel dient zur Veranschaulichung:

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

Ein 2D Array lässt sich in C realisieren, indem man ein Array anlegt, worin jedes Feld ein weiteres Array enthält. Lesen Sie weiter, um Genaueres zu erfahren.

2D Array in C: So wird’s gemacht

2D Arrays in C sind nichts anderes als eindimensionale Arrays, deren Felder jeweils ein weiteres Array enthalten. Ein 2D Array kann man also als Tabelle oder Matrix von Werten verstehen. 2D Arrays lassen sich mit folgender Syntax anlegen und befüllen:

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

Hier stellt die Zahl in den linken eckigen Klammern den Index im ersten Array dar, auf das zugegriffen werden soll, und die rechte den Index im zweiten. Diese beiden Zahlen kann man sich als 2D-Koordinaten oder Reihen- bzw. Spaltennummer vorstellen. Wie eindimensionale Arrays lassen sich zweidimensionale Arrays auch schon beim Anlegen mit Werten initialisieren.

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

Das Prinzip eines Arrays innerhalb eines anderen Arrays ist nicht auf zwei Dimensionen beschränkt. Mit dieser Methode können Sie Arrays mit beliebig vielen Dimensionen anlegen.

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

Günstige Webhosting-Pakete von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting inklusive persönlichem Berater mit IONOS!

Kostenlose Domain
SSL Zertifikat
DDoS-Schutz

Anwendungsfälle von 2D Arrays in C

Über ein 2D Array iterieren

Der häufigste Anwendungsfall von 2D Arrays in C (bzw. mehrdimensionaler Arrays) ist das Anlegen mehrdimensionaler Datenstrukturen. In folgendem Beispiel wird ein zweidimensionaler Array abwechselnd mit Nullen und Einsen befüllt, um ein Schachbrett darzustellen:

#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 von Strings

Ein Detail, das für den geschickten Einsatz von Arrays sehr wichtig ist: Ein Array ist eigentlich nur ein Pointer auf eine Stelle im Speicher und wird vom C-Compiler auch so verstanden. Der Index, der beim Beschreiben bzw. Auslesen individueller Felder angegeben wird, stellt also die Verschiebung entlang des Arrays relativ zur Basisadresse dar. Folgendes Beispiel soll dies verdeutlichen:

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

Strings werden in C auf gleiche Weise behandelt. So ist es also möglich, über einen String zu iterieren, als wäre er ein Array. Dies ist in folgendem Beispiel zu sehen, in dem drei in einem Array gespeicherte Sätze Zeichen für Zeichen in Großbuchstaben ausgegeben werden. Um auf Zeichen zuzugreifen, wird das Array-Indexfeld (eckige Klammern) verwendet:

#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