+ C - Array (Vektoren, Felder) Eindimensionale Arrays Beim Programmieren steht man oft vor dem Problem, ähnliche, zusammengehörige Daten (vom gleichen Datentyp) zu speichern. Wenn man zum Beispiel ein Programm erstellen soll, was den Durchschnittsverbrauch eines PKW berechnet, muss das Programm die gefahrenen km sowie die getankten Liter pro Tankfüllung in Variablen speichern. Dafür kann man ein Array (Vektor; Matrix; Feld) einsetzen. Ein Array ist eine Ansammlung von Variablen gleichen Typs und gleichen Namens. Die einzelnen Elemente dieser Arrays werden über einen Index angesprochen. {mospagebreak title= * Deklaration u. Initalisierung} Deklaration eines Arrays (Erzeugung eines Arrays) Die Erzeugung eines Arrays geschieht entsprechend der Deklaration von Variablen der Standarddatentypen wie int, float, u.s.w. Der Unterschied ist nur die Klamma hinter dem Variablenname. Syntax: Datentyp Arrayname[Anzahl] Der Datentyp gibt an, was für Informationen in dem Array gespeichert werden können. Der Arrayname ist der Name des Arrays (frei wählbar), der im Programm genutzt wird. Die Anzahl in den eckigen Klammern gibt an, wie viel Elemente das Array haben soll. Folgende Deklaration würde ein Array für 8 Int-Werte erzeugen: Index 5 6 7 Byte 8 6 8
Deklaration Bedeutung int array[] = {,,,,5,6,7,8}; Int-Array für Zahlen 5 6 7 8 Um sich eine bildliche Vorstellung von einem Array zu machen, könnte man es mit einem Schrank vergleichen, der eine entsprechende Anzahl an Schubladen besitzt, die jeweils einen Wert aufnehmen kann. Zurück zu unserem Tank-Programm. Damit könnte man für das Beispielprogramm zwei Arrays aufbauen, um die Liter- und die km-werte zu speichern. float liter[5], km[5]; Initialisierung eines Arrays Bei der Deklaration kann man Arrays auch Werte zuweisen. Dies geschieht durch Angabe der gewünschten Werte zwischen zwei geschweiften Klammern und einem Zuweisungsoperator. (Global deklarierte Arrays werden automatisch auf initialisiert.) Beispiele: int a[] = {}; // Initialisierung des gesamten Arrays auf. int a[] = {}; // Initialisierung der ersten Zelle des Arrays auf // und der Rest auf. int a[] = {,9,8}; // Initialisierung der ersten Zellen des Arrays auf, 9, 8 // und der Rest auf.
int a[] = {,}; // Initialisierung der zweiten Zellen des Arrays auf // und der Rest auf. {mospagebreak title= * Wertzuweisung} Wertzuweisung Bei der Wertzuweisung benötigt man beim Array nicht nur den Namen des Arrays, sondern auch den Index des entsprechenden Elements, dem man den Wert zuweisen möchte. Der Index, um an die einzelnen Werte zu kommen, läuft dabei von bis (Anzahl-). Um den ersten Liter-Wert in dem Array zu speichern, wären folgende Anweisungen möglich: liter[] =.; oder scanf("%f", &liter[]); und für den letzten Wert: liter[59] =.; oder scanf("%f", &liter[59]); Arrays werden oft mit Schleifen verwendet. Wenn man z.b. jedem Element des Arrays ein bestimmten Wert zuordnen möchte. Dabei ist besonders darauf zu achten, das man durch die Schleifen nicht aus dem Array läuft, das heißt einen Index benutzt der nicht deklariert wurde. {mospagebreak title= * Größe des Array} Größe eines arrays Um die Größe eines Arrays zu bestimmen, kann man auf die sizeof()-funktion zurückgreifen. Die sizeof()-funktion ermittelt den Speicherbedarf einer Variablen. Dies gilt auch für Arrays. Folgendes Programm bestimmt die Anzahl der Elemente eines Arrays, in dem es den Speicherbedarf des Arrays durch den Speicherbedarf des Array-Datentyps teilt. #include <stdio.h> void main() {
int anzahl, array[]; anzahl = sizeof(array) / sizeof(int); printf("im Array können %d Zahlen gespeichert werden.\n", anzahl); } Bildschirmausgabe: Im Array können Zahlen gespeichert werden. {mospagebreak title= * Mehrdimensionale Arrays} Mehrdimensionale Arrays Beim Programmieren benötigt man häufig mehrdimensionale Arrays, wie zum Beispiel zwei-, drei- oder n-dimensionale Arrays. Deklaration Die Deklaration eines zweidimensionalen Arrays sähe wie folgt aus: datentyp arrayname [zeilen] [spalten] Der Datentyp gibt an, was für Informationen in dem Array gespeichert werden können. Der Arrayname ist der Name des Arrays (frei wählbar), der im Programm genutzt wird. Die Zeilen in den eckigen Klammern gibt an, wie viel Zeilen das Array haben soll. Die Spalten in den eckigen Klammern gibt an, wie viel Spalten das Array haben soll. Beispiel: int array [] [5]; Spalte Zeile
/ / / / / / / / / / / / / / / / / / / /
Auch hier könnte man sich das Array wie einen Schrank vorstellen, nur das dieser Schrank nicht nur eine Reihe von Schubladen besitzt sondern. Initialisierung: Die Werteübergabe beim zweidimensionalen Array ist ähnlich wie die beim eindimensionalen. Beispiel: int array [] [5] = { {,,,,5}, {,,,,5}, {,,,,5}, {,,,,5} }; Spalte Zeile
5 5 5 5 Wertzuweisung: Bei der Wertzuweisung benötigt man beim zweidimensionalen Array nicht nur den Namen des Arrays, sondern auch den Index für die Zeile und den Index der Spalte des entsprechenden Elements, dem man den Wert zuweisen möchte. Der jeweilige Index läuft dabei von bis (Anzahl-). array[][] = ; // Erstes Element (Spalte- u. Zeile-Index gleich ) oder scanf("%f", &array[][]); // Letztes Element (Zeilen-Index gleich ) // (Spalten-Index gleich ) {mospagebreak title= * Textarray} Textarray Ein weiteres eindimensionales Array, was sehr häufig verwendet wird, ist das Array des Datentyps char. Jede char- Variable kann genau ein Zeichen speichern. Wenn man nun Wörter oder ganze Sätze speichern möchte, braucht man ein
Array von chars. Die Deklaration eines solchen Textarrays kann wie folgt geschehen: Index 5 6 7 8 9 Byte 5 6 7 8 9 Deklaration Bedeutung char text[]; Textarray für 9 Buchstaben char text[] = "Hallo";
Textarray für 5 Buchstaben H a l l o \ char text[] = "Hallo"; Textarray für 9 Buchstaben H a l l o \ Dabei ist das letzte Byte des Textes immer das Textabschlusszeichen \ (ASCII-Null). Damit können in einem Array text[] maximal 9 Buchstaben gespeichert werden. Wird die Anzahl der Elemente beim Array angegeben und durch eine geschweifte Klammer dem Array Werte übergeben, werden überschüssige Werte abgeschnitten. siehe auch Zeichenketten.