Die Größe eines Arrays
Eine Konstante wie ANZAHL hat eine Schwäche: Du musst sie selbst mit dem Array in Einklang halten. Wenn du dem Array ein Element hinzufügst und die Konstante vergisst, überspringt die Schleife das neue Element. Wenn du eines entfernst, geht die Schleife über das Ende hinaus. C kann die Anzahl der Elemente aus dem Array selbst berechnen, mit sizeof.
sizeof (englisch „size of“, „Größe von“) sagt dir, wie viel Speicher etwas belegt, in Bytes. Ein Byte ist die kleinste Einheit des Speichers. Hier belegt ein int 4 Bytes, ein Array aus fünf int belegt also 20 Bytes. Wenn du die Größe des ganzen Arrays durch die Größe eines Elements teilst, erhältst du die Anzahl der Elemente:
int punkte[] = {80, 92, 75, 60, 88};
int anzahl = sizeof(punkte) / sizeof(punkte[0]);
printf("%d\n", anzahl);Das gibt Folgendes aus:
5sizeof(punkte) ist 20, die Größe des ganzen Arrays. sizeof(punkte[0]) ist 4, die Größe des ersten Elements. Alle Elemente haben denselben Typ und damit dieselbe Größe, deshalb ist 20 / 4 = 5 genau die Anzahl der Elemente. Das funktioniert für Arrays jedes Typs: Ein double belegt 8 Bytes, aber die Division ergibt wieder die Anzahl der Elemente.
Jetzt passt die Schleife immer zum Array. Füge dem Array einen Wert hinzu, und anzahl ändert sich von selbst:
int punkte[] = {80, 92, 75, 60, 88, 95};
int anzahl = sizeof(punkte) / sizeof(punkte[0]);
for (int i = 0; i < anzahl; i++) {
printf("%d ", punkte[i]);
}
printf("\n");Das gibt Folgendes aus:
80 92 75 60 88 95Zwei Fehler sind hier häufig:
- Die Division vergessen.
sizeof(punkte)allein ist 20, die Anzahl der Bytes, nicht der Elemente. Eine Schleife bis 20 geht über das Ende hinaus und bricht mitRuntimeError: unreachableab. sizeofdirekt mit%dausgeben.sizeofliefert eine andere Art von ganzer Zahl alsint, deshalb lässt sichprintf("%d\n", sizeof(punkte) / sizeof(punkte[0]));nicht kompilieren:error: format specifies type 'int' but the argument has type '__size_t' (aka 'unsigned long'). Speichere das Ergebnis zuerst in einerint-Variablen, wie in den Beispielen oben.
So schreibst du es:
Anweisungen
- 1
Erstelle eine Variable
anzahlvom Typintmit der Anzahl der Elemente vonpreise. Berechne sie mitsizeof, schreibe nicht4. - 2
Schreibe eine
for-Schleife, die die Indizes durchläuft, solange sie kleiner alsanzahlsind, und jeden Preis in einer eigenen Zeile mit zwei Nachkommastellen (%.2f) ausgibt:29.90,149.00,99.50und15.00. - 3
Im Shop ist ein neues Produkt eingetroffen. Füge am Ende des Arrays, in den geschweiften Klammern, einen fünften Preis hinzu:
5.49. Ändere sonst nichts und führe das Programm aus: Die Schleife gibt auch den neuen Preis aus, dennanzahlist jetzt5.