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:

5

sizeof(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 95

Tady 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 chybou RuntimeError: unreachable.
  • Výpis sizeof rovnou pomocí %d. sizeof dává jiný datový typ celého čísla než int, a proto printf("%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é typu int, jako v příkladech výše.

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

6/12