Zurück zu: C Tutorial
Arrays (Felder) für gleichartige Werte
Arrays werden verwendet, um mehrere Werte mit gleichem Datentyp in einer einzigen Variablen zu speichern, anstatt für jeden Wert separate Variablen zu deklarieren. Um ein Array zu erstellen, definierst Du den Datentyp (wie int) und gibst den Namen des Arrays gefolgt von eckigen Klammern [] an.
Um Werte einzufügen, verwendest Du eine durch Kommas getrennte Liste in geschweiften Klammern:
int meineZahlen[] = {13, 42, 18, 20};
Wir haben jetzt eine Variable erstellt, die ein Array aus vier Ganzzahlen enthält.
Auf die Elemente eines Arrays zugreifen
Um auf ein Array-Element zuzugreifen, beziehst Du Dich auf seine Indexnummer.
Array-Indizes beginnen mit 0: [0] ist das erste Element. [1] ist das zweite Element usw.
Diese Anweisung greift auf den Wert des ersten Elements [0] in myNumbers zu:
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
printf("%d", meineZahlen[0]);
// gibt 13 aus
Ändern eines Array Elements
Genauso wie Du ein Array-Element herausholst, kannst Du auch einen neuen Wert zuweisen. Du musst Dich auf die Indexnummer des Elements beziehen:
Beispiel
meineZahlen[3] = 23;
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
meineZahlen[3] = 23;
printf("%d", meineZahlen[3]);
// gibt jetzt 23 statt 20 aus
Durchlaufen eines Arrays
Mit der for-Schleife kannst Du Array-Elemente durchlaufen.
Das folgende Beispiel gibt alle Elemente im Array myNumbers aus:
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
int index;
for (index = 0; index < 4; index++) {
printf("%d\n", meineZahlen[index]);
}
Größe eines Arrays festlegen
Du kannst ein Array auch zunächst deklarieren und später erst mit Werten füllen. Das ist durchaus üblich.
Beispiel
// ein Array für int-Werte deklarieren:
int meineZahlen[5];
// Elementwerte festlegen
meineZahlen[0] = 54;
meineZahlen[1] = 34;
meineZahlen[2] = 4;
meineZahlen[3] = 87;
meineZahlen[4] = 9;
Mit dem Index, den Du in den eckigen Klammern angibst, darfst Du natürlich nicht über die reservierte Größe hinausgehen. Hier sind für das Array meineZahlen[5] also die Indizes 0 bis 4 erlaubt. Eine Zuweisung meineZahlen[5] = 45 würde zu einem Fehler führen.
Du kannst die Größe des Arrays nach der Erstellung nicht mehr so einfach ändern. Es gibt Möglichkeiten, aber dazu später dann bei der dynamischen Speicherverwaltung.
Array Größe ermitteln
Um die Größe eines Arrays zu ermitteln, können Sie den Operator sizeof verwenden:
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
printf("%lu", sizeof(meineZahlen)); // gibt 16 aus
Warum wurde als Ergebnis
16statt4angezeigt, wenn das Array 4 Elemente enthält?
Dies liegt daran, dass die Funktion sizeof die Größe eines Typs in Bytes zurückgibt.
Im Kapitel „Datentypen“ hast Du gelernt, dass ein int-Typ normalerweise 4 Byte groß ist. Im obigen Beispiel ergibt sich also 4 x 4 (4 Byte x 4 Elemente) = 16 Byte.
Die Kenntnis der Speichergröße eines Arrays ist hilfreich, wenn Du mit größeren Programmen arbeitest, die eine effiziente Speicherverwaltung erfordern. Wenn Du jedoch nur herausfinden möchtest, wie viele Elemente ein Array hat, kannst Du die folgende Formel verwenden (die die Größe des Arrays durch die Größe eines Array-Elements dividiert):
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
int laenge = sizeof(meineZahlen) / sizeof(meineZahlen[0]);
printf("%d", laenge ); // gibt 4 aus
Loops erstellen
Indem wir die sizeof Formel aus dem obigen Beispiel verwenden, können wir jetzt Schleifen erstellen, die für Arrays jeder Größe funktionieren, was nachhaltiger ist.
Anstatt zu schreiben:
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", meineZahlen[i]);
}
Besser ist es zu schreiben:
Beispiel
int meineZahlen[] = {13, 42, 18, 20};
int laenge = sizeof(meineZahlen) / sizeof(meineZahlen[0]);
int i;
for (i = 0; i < laenge; i++) {
printf("%d\n", meineZahlen[i]);
}
Praktisches Beispiel
Um die Verwendung von Arrays anhand eines praktischen Beispiels zu demonstrieren, erstellen wir ein Programm, das den Durchschnitt verschiedener Werte berechnet:
Beispiel
// Array mit verschiedenen Werten
int werte[] = {34, 33, 12, 17, 45, 64, 39, 55};
float durchschnitt, summe = 0.0;
int i;
// Länge des Array bestimmen
int laenge = sizeof(werte) / sizeof(werte[0]);
// durch alle Werte laufen und summieren
for (i = 0; i < laenge ; i++) {
summe += werte[i];
}
// Durchschnitt berechnen
durchschnitt = summe / laenge;
// Durchschnitt ausgeben
printf("Durchschnitt ist: %.2f", durchschnitt);
Und in diesem Beispiel erstellen wir ein Programm, das den niedrigsten Wert unter verschiedenen Werten ermittelt:
Beispiel
// Array mit verschiedenen Werten
int werte[] = {34, 33, 12, 17, 45, 64, 39, 55};
int i;
// Länge des Array bestimmen
int laenge = sizeof(werte) / sizeof(werte[0]);
// Variable für den geringsten Wert erstellen
int minimum = werte[0];
// durch das Array laufen und Minimum ermitteln
for (i = 0; i < laenge; i++) {
if (minimum > werte[i]) {
minimum = werte[i];
}
}
Mehrdimensionale Arrays
Bis jetzt haben wir immer nur über Arrays mit einer Dimension gesprochen. Das sind sogenannte eindimensionale Arrays. Brauchst Du sehr oft bei der Programmierung. Manchmal werden Daten aber auch in zwei oder mehr Dimensionen gespeichert, verwaltet oder ausgegeben. Das können Tabellen sein, aber auch andere Datenstrukturen. Man spricht dann von mehrdimensionalen Arrays.
Ein mehrdimensionales Array ist grundsätzlich ein Array, das in jedem Element wieder ein Array enthält.
Arrays können eine beliebige Anzahl von Dimensionen haben. Hier soll es erstmal um zweidimensionale Arrays gehen.
Zweidimensionale Arrays
Ein zweidimensionales Array wird auch als Matrix bezeichnet (eine Tabelle aus Zeilen und Spalten).
Um ein zweidimensionales Array aus Ganzzahlen zu erstellen, kannst Du folgende Notation aufschreiben:
int matrix[2][3] = { {5, 6, 1}, {2, 5, 7} };
Die erste Dimension stellt die Anzahl der Zeilen [2] dar, während die zweite Dimension die Anzahl der Spalten [3] darstellt. Die Werte werden in Zeilenreihenfolge angeordnet und können wie folgt visualisiert werden:
Zugriff auf die Elemente eines zweidimensionalen Arrays
Um auf ein Element eines zweidimensionalen Arrays zuzugreifen, musst Du die Indexnummer der Zeile und der Spalte angeben.
Diese Anweisung greift auf den Wert des Elements in der ersten Zeile (0) und dritten Spalte (2) des Matrix-Arrays zu.
Beispiel
int matrix[2][3] = { {5, 6, 1}, {2, 5, 7} };
printf("%d", matrix[0][2]); // gibt 1 aus
Denk daran: Die Zählung von Array-Indizes beginnt mit 0: [0] ist das Element am Anfang, danach [1] als nächstes Element usw.
Elemente in einem zweidimensionalen Array ändern
Um den Wert eines Elements zu ändern, beziehst Du Dich auf die Indexnummer des Elements in jeder der Dimensionen:
Das folgende Beispiel ändert den Wert des Elements in der ersten Zeile (0) und der ersten Spalte (0):
Beispiel
int matrix[2][3] = { {5, 6, 1}, {2, 5, 7} };
matrix[0][0] = 13;
printf("%d", matrix[0][0]); // gibt 13 aus, statt 5
Durchlaufen eines zweidimensionalen Arrays
Um ein mehrdimensionales Array zu durchlaufen, benötigst Du eine Schleife für jede Dimension des Arrays.
Das folgende Beispiel gibt alle Elemente im Matrix Array aus:
Beispiel
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n", matrix[i][j]);
}
}