![]() Vorherige Seite |
![]() Eine Ebene hoch |
![]() Nächste Seite |
---|
Die allgemeine Syntax zur Definition eines eindimensionalen Vektors lautet:
Beispiel: Sie wollen zur Erstellung eines Notenspiegels die Anzahl der Einsen, der Zweien ... und der Sechsen ermitteln. Dafür benötigen Sie eine Kette von ganzen Zahlen, also:
int Note[6];
Um einen eindimensionalen Vektor zu initialisieren gibt es zwei Möglichkeiten. Erstens, Sie weisen jedem Element des Vektors nach der Definition einzeln einen Wert zu. Am Beispiel der Noten kann das entweder so,
Note[0] = 0; Note[1] = 0; Note[2] = 0; Note[3] = 0; Note[4] = 0; Note[5] = 0;
oder, und das ist vor allem für große Vektoren interessant, besser so aussehen:
for(i=0; i<6; i++) Note[i] = 0;
Hier kann bereits gesehen werden, wie die Elemente eines Vektors angesprochen werden. Nach dem Namen wird in eckigen Klammern die Nummer des Elements angegeben. Beachte: Die Zählung beginnt bei null und hört damit eine Nummer vor der Anzahl der Elemente auf! Unser Vektor für die Noten hat sechs Elemente mit den Nummern null bis fünf.
Die zweite Möglichkeit der Initialisierung ist direkt bei der Definition. In unserem Beispiel sieht das wie folgt aus:
int Note[6] = { 0, 0, 0, 0, 0, 0 };
In dieser Schreibweise steckt eine Redundanz: Die Anzahl der Elemente wird sowie durch die Zahl in den eckigen Klammern, als auch durch die Anzahl der Elemente in den geschweiften Klammern angegeben. Es ist von daher nur logisch, dass die Zahl in den eckigen Klammern weggelassen werden kann:
int Note[] = { 0, 0, 0, 0, 0, 0 };
Bei Zeichenketten gibt es eine Sonderregel. Die Initialisierung
char Text[] = { 'H', 'a', 'l', 'l', 'o', '\0' };
kann verkürzt werden zu
char Text[] = "Hallo";
Wie wir bereits bei der Initialisierung gelernt haben, werden die Elemente eines Vektors durch eine Zahl in eckigen Klammern hinter dem Vektornamen angesprochen. Das gilt gleichermaßen für Schreib- und Lesezugriffe. Beispiel:
Note[2]++;
erhöht die Anzahl der Dreien um eins.
Bestanden = Note[0]+Note[1]+Note[2]+Note[3];
ermittelt die Anzahl aller bestandenen Studenten.
Bei der Zahl in der eckigen Klammer spricht man vom Index. Auch der Index kann Ergebnis eines Ausdrucks sein. Beispiel:
if(Zahl>=1 && Zahl<=6) Note[Zahl-1]++;
C überprüft nicht die Grenzen des Vektors. Beim Beispiel der Noten führt
Zahl = Noten[6]; /* Fehler */
zu einem unsinnigen Ergebnis. Schlimmer noch,
Noten[6] = Zahl; /* schlimmer Fehler */
kann zum Absturz Ihres Programms oder bei unsoliden Systemen zum Absturz des Systems führen. Der Grund liegt in der besonderen Stärke von C: die Geschwindigkeit. Würden bei jedem Zugriff auf einen Vektor zuerst die Grenzen geprüft, so würde dass viel Rechenzeit kosten. In C ist es daher Aufgabe der Programmierers, die Grenzen von Vektoren zu wahren.