Velikost pole
Konstanta jako POCET má jednu slabinu: musíte ji sami udržovat ve shodě s polem. Když do pole přidáte prvek a na konstantu zapomenete, cyklus nový prvek vynechá. Když nějaký prvek odeberete, cyklus se naopak dostane za konec pole. Jazyk C ale umí počet prvků zjistit přímo z pole, a to pomocí sizeof.
sizeof (anglicky size of, tedy „velikost něčeho“) vám řekne, kolik místa něco zabírá v paměti, a to v bajtech. Bajt je základní jednotka paměti. Jedna hodnota typu int tu zabírá 4 bajty, takže pole pěti hodnot typu int zabírá 20 bajtů. Když velikost celého pole vydělíte velikostí jednoho prvku, dostanete počet prvků:
int body[] = {80, 92, 75, 60, 88};
int pocet = sizeof(body) / sizeof(body[0]);
printf("%d\n", pocet);Program vypíše:
5sizeof(body) je 20, velikost celého pole. sizeof(body[0]) je 4, velikost prvního prvku. Všechny prvky mají stejný datový typ, a tedy i stejnou velikost, takže 20 / 4 = 5 je přesně počet prvků. Funguje to pro pole libovolného typu: hodnota typu double zabírá 8 bajtů, ale dělení dá zase počet prvků.
Teď cyklus vždycky odpovídá poli. Přidejte do pole hodnotu a pocet se změní sám:
int body[] = {80, 92, 75, 60, 88, 95};
int pocet = sizeof(body) / sizeof(body[0]);
for (int i = 0; i < pocet; i++) {
printf("%d ", body[i]);
}
printf("\n");Program vypíše:
80 92 75 60 88 95Tady se často dělají dvě chyby:
- Zapomenuté dělení. Samotné
sizeof(body)je 20, tedy počet bajtů, ne prvků. Cyklus do 20 se dostane za konec pole a zastaví se s chybouRuntimeError: unreachable. - Výpis
sizeofrovnou pomocí%d.sizeofdává jiný datový typ celého čísla nežint, a protoprintf("%d\n", sizeof(body) / sizeof(body[0]));nepůjde přeložit:error: format specifies type 'int' but the argument has type '__size_t' (aka 'unsigned long'). Výsledek proto nejdřív uložte do proměnné typuint, jako v příkladech výše.
Jak psát:
Pokyny
Vytvořte proměnnou pocet typu int s počtem prvků pole ceny. Spočítejte ho pomocí sizeof, nepište 4.
Napište cyklus for, který prochází indexy, dokud jsou menší než pocet, a vypíše každou cenu na samostatný řádek se dvěma desetinnými místy (%.2f): 29.90, 149.00, 99.50 a 15.00.
Do obchodu přišlo nové zboží. Přidejte na konec pole, dovnitř složených závorek, pátou cenu 5.49. Nic jiného neměňte a program spusťte: cyklus vypíše i novou cenu, protože pocet je teď 5.
Začněte programovat zdarma
6/12