|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Um viele gleichartige Variable zusammenzufassen gibt es die Felder bzw. Arrays. Felder werden deklariert, indem hinter dem Variablennamen in eckigen Klammern die Anzahl der gewünschten Elemente steht. Wenn in Ausdrücken auf ein einzelnes Element zugegriffen werden soll, schreibt man hinter dem Variablennamen in eckigen Klammern die Nummer bzw. den Feldindex. Der Feldindex läuft in C immer von 0 bis (Anzahl Elemente -1). Das erste Element hat also den Index 0, das letzte als Index 1 weniger als das Feld Elemente hat. Wie sieht das nun aus?
... int i1, i2, i3, iFeld[3]; iFeld[0] = 1; iFeld[1] = 2; iFeld[2] = 3; i1 = iFeld[0]; i2 = iFeld[1] * 3; i3 = 5 + iFeld[i1];
Dieses Beispiel deklariert ein Feld mit 3 Elementen, die zuerst gesetzt und anschließend in Anweisungen benutzt werden. Als Feldindex wird in der letzten Zeile keine Konstante sondern eine Variable benutzt. Ein Feldindex muß lediglich ganzzahlig sein. Es kann auch wiederum ein Ausdruck sein, der Feldindex kann auch berechnet werden. Der Compiler übernimmt keine Überprüfung, ob der Feldindex im gültigen Bereich liegt! Dies ist bei Ausdrücken als Feldindex auch nicht mehr möglich! In dem Beispiel kann man also auf iFeld[3] zugreifen, ohne daß es eine Fehlermeldung des Compilers gibt. Zur Laufzeit erfolgt auch keine Überprüfung, da sie viel Zeit kostet und bei dynamisch allozierten Feldern nur schwer zu realisieren ist. Ein Schreibzugriff kann dabei Daten überschreiben, die anderweitig benutzt werden und zu Fehlfunktionen, im ungünstigsten Fall auch zum Absturz führen!
Felder lassen sich auch initialisieren. Dazu werden die Werte durch geschweifte Klammern zusammengefaßt und durch Kommas getrennt:
... int iFeld[3] = { 1, 2, 3 }
Es ist auch möglich, mehrdimensionale Felder zu deklarieren. Dazu werden die für jede Dimension die Größe in eigene eckige Klammern geschrieben.
... int iFeld[3][2] = { 1, 2, 3, 4, 5, 6 }, i; int jFeld[3][2] = { {1, 2}, {3, 4}, {5, 6} }, i; i = iFeld[2][1];
Anschaulich ist dies ein Feld mit 3 Elementen, bei dem jedes Element ein Feld von 2 Elemten vom Typ int ist. Deshalb werden in der Initialisierung die Werte für den gleichen ersten Index direkt hintereinander geschrieben. das zweite Beispiel jFeld setzt zur Verdeutlichung noch zusätzliche geschweifte Klammern.
In C gibt es keinen speziellen Datentyp für Zeichenketten bzw. Strings. Eine Zeichenkette ist ein Feld mit Elementen vom Typ char. Das Ende der Zeichekette wird durch ein Zeichen mit der Nummer 0 markiert. Dieses Stringende kann auch als Zeichenkonstante '\0' dargestellt werden.
Es ist möglich, bei einer Initialisierung die Größe des Feldes wegzulassen. Zeichenketten können auch mit einer Zeichenkettenkonstante anstelle der Angabe der einzelnen Felder in geschweiften Klammern initialisiert werden.
#include <stdio.h> #include <string.h> int main() { char str[] = "Hallo"; printf("Länge der Zeichenkette: %ld Zeichen\n",strlen(str)); printf("Größe des Feldes str : %ld Zeichen\n",sizeof(str)); }
Die hier benutzten Funktionen werden später noch ausführlich erklärt. Die Funktion strlen liefert die Anzahl Zeichen des Strings. Das abschließende '\0' wird hierbei nicht mitgezählt. Deshalb ist das Ergebnis dieser Ausgabe 5. Da das Stringende natürlich auch in dem Feld Platz finden muß, ist die zweite Ausgabe, die die Größe eines Objekts im Speicher liefert, 6. Dies wird wichtig, wenn der Speicher für eine Zeichenkette dynamisch alloziert wird! Beispiele dazu finden sich später.
English version not yet available. |