2D Arrays in C
Mit Arrays speicherst du in C zusammengehörige Daten effizient ab, ohne unzählige Variablen definieren zu müssen. Meistens sind Arrays eindimensional, sie lassen sich aber beliebig erweitern. Wir zeigen dir, wie du 2D-Arrays in C erstellst und sie geschickt für deine Projekte nutzt.
Grundlagen zu Arrays in C
Um 2D-Arrays in C sicher zu beherrschen, hilft ein Blick auf die Basis der Programmiersprache C. Wie in vielen Sprachen sind Arrays ein Speicherblock für mehrere Werte desselben Typs. So bündelst du Daten unter einem einzigen Namen. Die Größe des Arrays legst du beim Kompilieren fest – sie bleibt danach fix. So deklarierst 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};cIm Beispiel steht der Datentyp wie gewohnt vor dem Namen. Die eckigen Klammern signalisieren dem Compiler, dass es sich um ein Array handelt. Die Zahl darin bestimmt die Kapazität. Das Array zahlen1 wird im Beispiel uninitialisiert erstellt, ist also vorerst leer. Du kannst es später im Programmverlauf befüllen.
Das Array zahlen2 wird hingegen sofort manuell initialisiert. Bei großen Datenmengen ist das jedoch mühsam und macht den Code unübersichtlich. Besser ist es, Arrays programmatisch 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.cAbhängig von Betriebssystem, C-Standard und Deklarationsort können uninitialisierte Variablen Zufallswerte 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 Erstellung greifst du über den Index auf die Werte zu. Denk daran: Arrays starten immer bei Index 0. Hier ein Beispiel zur Veranschaulichung:
int zahlen2[5] = {1, 2, 3, 4, 5};
zahlen2[3] = zahlen2[2];
printf("%d\n", zahlen2[3]);
// Ausgabe: 3cEin 2D-Array realisierst du in C, indem du ein Array erstellst, in dem jedes Feld selbst wieder ein Array ist. Erfahre jetzt, wie das genau funktioniert.
2D-Arrays in C: So geht’s
Zweidimensionale Arrays in C sind im Grunde verschachtelte eindimensionale Arrays. Du kannst sie dir wie eine Tabelle oder Matrix vorstellen. Nutze folgende Syntax für die Erstellung und Befüllung:
2d_ints[10][10];
2d_ints[0][1] = 0;
2d_ints[2][1] = 2;
2d_ints[9][4] = 36;
// usw.cDie 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 Koordinaten oder Zeilen und Spalten. Auch 2D-Arrays lassen sich direkt beim Anlegen 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}
}cDieses Prinzip der Verschachtelung lässt sich unendlich fortsetzen. So erstellst du Arrays mit beliebig vielen Dimensionen für komplexe Datenstrukturen.
int 4d_ints[10][10][10][10]cEinsatzgebiete von 2D-Arrays in C
Über 2D-Arrays iterieren
Meistens nutzt man 2D-Arrays in C für mehrdimensionale Strukturen. Im folgenden Beispiel befüllen wir ein Array abwechselnd mit Nullen und Einsen, um ein klassisches Schachbrettmuster 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
*/cEin Array aus Strings
Für den Profi-Einsatz wichtig: Ein Array ist technisch gesehen nur ein Pointer auf eine Speicheradresse. Der Index gibt lediglich an, wie weit du dich relativ zur Basisadresse im Speicher bewegst. Das verdeutlicht dieses Beispiel:
int zahlen2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *zahlen2);
// Ausgabe: 1
printf("%d\n", *(zahlen2 + 2));
// Ausgabe: 3cIn C funktionieren 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ßbuchstaben 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