## Programovací jazyk

Tato kapitola přináší novou třídu složených typů – struktury, neboli
záznamové typy.

### Definice

Definice struktury má tento tvar:

    struct jméno₀
    {
        typ₁ jméno₁;
        typ₂ jméno₂;
        …
        typₙ jménoₙ;
    };

Každé jméno uvnitř definice (‹jméno₁› až ‹jménoₙ›) definuje «složku»
struktury odpovídajícího typu.¹

Konečně ‹jméno₀› je jménem struktury (pozor, není totéž jako jméno
typu!). Definujeme-li strukturu ‹foo›, na místech, kde je očekáván
typ, můžeme psát ‹struct foo›.

### Výrazy

Se strukturami souvisí také dva nové tvary výrazů:

 • ‹expr₁.jméno› – přístup ke složce; typ výrazu ‹expr₁› musí být
   struktura, která má složku pojmenovanou ‹jméno›. Vyhodnotí-li se
   ‹expr₁› na objekt, výraz jako celek pojmenovává příslušný
   podobjekt (a může tedy stát na levé straně přiřazení).
 • ‹expr₁->jméno› – nepřímý přístup ke složce skrze ukazatel –
   podobně jako dereference, vstupní podmínkou je, že ‹expr₁› je
   «platný» ukazatel. Výsledkem je vždy objekt (l-hodnota).

¹ Složky můžeme sdružovat podle typu, nicméně pozor na ukazatele –
  stejně jako u lokálních proměnných, deklarace položek ‹int *x, y;›
  zavádí položku ‹x› typu ‹int *› a položku typu ‹y› typu ‹int›. Dvě
  položky typu ‹int *› zapisujeme jako ‹int *x, *y;›.
