Seminární skupina IB001 Úvod do programování skrze C (skupiny 27 a 28)

Týden 11

Složené (agregované) datové typy III - struktura

Struktura je oproti poli nehomogenním datovým typem. Struktura se skládá z datových položek, které mohou být různého typu. Položky struktury se mohou dále vnořovat, tj. položky nemusí být primitivního datového typu (char, int, float), ale mohou být jakéhokoliv platného typu - např. ukazatele, pole, struktury.

Definice struktury

Definice struktury se většinou zapisuje mimo funkce programu, tak aby v nich mohla být užívána. K zápisu definice struktury se užívá klíčové slovo struct a vypadá např. takto:

struct person
{
    char name[20];
    int age;
    bool male;
} george, database[10];

Příklad výše definuje strukturu person a zároveň dvě proměnné george (typu struktura person) a database (typu pole 10 struktur person). Pokud bychom chtěli někde dále v programu definovat další proměnnou s využitím typu struktury person, udělali bychom to takto:

struct person joseph;

Takový zápis je možné si zkrátit definováním vlastního pojmenovaného datového typu, jehož jméno pak užijeme k definici proměnné stejně jako jména datových typů jazyka C.
Mohlo by to vypadat takto - zde se identifikátor za strukturou použije jako jméno nového typu, nikoliv proměnné:

typedef struct
{
    int x, y;
} point;

point p1, p2;

Přístup k položkám struktury

K položkám struktury se přistupuje buď přes tečkovou notaci, máme-li proměnnou typu struktura:

p1.x = 2;
p1.y = 3;​

nebo přes šipkovou notaci, máme-li ukazatel na nějakou strukturu.

point * p = &p1;
p->x = 0;
p->y = 0;

Pokud by byly položky vnořené pak užíváme tečkovou nebo šipkovou notaci tak dlouho, jak je potřeba.