next up previous contents
Elõre: Struktúrák megadása Fel: C programozás a BORLAND Vissza: Egyéb vezérlésátadó utasítások

Struktúrák és unionok

A korszerû programozási nyelvek a struktúrált programozást nemcsak vezérlési, hanem adatstruktúrák biztosításával is kötelesek támogatni, de amíg a vezérlési struktúráknak egy jól meghatározott köre van, addig az adatstruktúrák annyifélék lehetnek, ahány feladatra kell megoldást találni. Ezért új vezérlõutasítások létrehozását a programozási nyelvek ritkán támogatják, ellenben adatstruktúrák definiálását lehetõvé kell tenniük. (Az objektumorientált programozás, így a C++ is még ezen a gondolatkörön is túllép: az összetett adatstruktúrákhoz a hozzájuk tartozó mûveleteket is definiálva kapjuk az ún. objektumokat).

A C nyelvben az elemi típusokból felépített adatstruktúrákat aggregátumoknak nevezzük, és alapvetõen háromfélék lehetnek: tömbök, struktúrák és unionok. Ez az elhatárolás azonban nem zárja ki ezek tetszõleges kombinációit, például szervezhetünk struktúra elemû tömbökbõl (és egyéb összetevõkbõl) új struktúrát vagy uniont.

Az eddig megismert egyetlen aggregátum, az egydimenziós tömb, a következõ elõnyöket biztosítja: tetszõleges eleméhez azonos idõ alatt lehet hozzáférni (random access), mérete dinamikusan is beállítható (lásd késõbb), sõt tetszõleges folytonos része önálló tömbként is kezelhetõ. Hátránya, hogy minden elemének azonos típusúnak kell lennie. A most ismertetésre kerülõ aggregátum, a struktúra viszont lehetõséget biztosít arra, hogy logikailag összetartozó, de különbözõ típusú elemeket egységbe fogva kezelhessünk. Minden definiált adatstruktúra a fordító számára új típusként jelentkezik (typedef-fel név is rendelhetõ egy struktúra típushoz), és a továbbiakban azonos módon használhatjuk, mint az elemi típusokat (azaz deklarálhatunk illetve definiálhatunk ilyen típusú objektumokat, alkalmazhatjuk rá a sizeof operátort, részt vehet típusmódosító szerkezetben, képezhetünk ilyen típusra mutató pointereket stb.). A korszerû C implementációk - mint például a BORLAND C++ - lehetõvé teszik (azonos típusú) struktúraváltozók közt a közvetlen értékadást, struktúrák szerepeltetését függvények paramétereként illetve visszatérési értékeként is.