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.