next up previous contents
Elõre: Függvények változó számú paraméterrel Fel: További magyarázatok Vissza: A balérték és jobbérték

Még egyszer a deklarációkról és a típusokról

Amint arra a 1.9.1-es részben utaltunk, az alaptípusokból (és persze a felhasználó által definiált típusokból is) a típusmódosító operátorok felhasználásával (lásd a 1.4-es táblázatot) újabb típusokat származtathatunk.

A származtatott típusok jelölésével és precedenciájával kapcsolatos ismereteket is áttekintettük. Ezek megértését talán nehezíti, hogy a * típusmódosító operátor prefix operátor, míg a tömbtípust képzõ [ ] operátor és a függvénytípust képzõ ( ) operátor postfix operátor. Ennek következtében sokszor zárojelezni kell, hogy egy adott definició az elképzeléseink szerinti típust eredményezze. Bonyolultabb típusok esetén célszerû a typedef használata, de egyszerûbb esetekben ez sokszor elmarad. Gyakori, hogy egy származtatott típusú tárolási egysége deklarációja során történik a típusdefiniálás is. Erre tipikus példa a pointer változók deklarálása, mint például int* ip; vagy egyszerre több típusmódosító operátort is alkalmazva, amint azt az alábbi példák szemléltetik:

            int* v[10];
            int (*p)[10];
A fenti deklarációk szerint v egy 10 elemû pointer-tömb, p pedig egy egy 10 elemû vektorra mutató pointer. (Mivel a [ ] precedenciája magasabb, mint a * típusmódosító operátoré, a p ponter deklarációjakor zárójeleznünk kellett.)

Eléggé fáradtságos dolog lenne, ha egy program minden egyes azonosítóját egyenként kéne deklrálni. Ez különösen igaz abban az esetben, ha az egyes tárolási egységek azonos típusúak. Amint azt a 1.4.4-es alfejezetben láttuk, lehetõségünk van arra, hogy egy deklarációban azonosítólistát alkalmazzunk: a int x, y; deklaráció egyenértékû az int x;   int y; deklarációkkal.

Fontos azonban megjegyezni, hogy amikor a fenti példához hasonló származtatott típusú változókat deklarálunk, akkor a típusmódosító operátorok csak egyetlen listaelemre vonatkoznak. Tehát például az

            int* p, y;
deklaráció az
            int* p;
            int  y;
deklarációval egyenértékû, azaz y típusa int lesz, nem pedig egészre mutató pointer. Az a véleményünk, hogy minden összetettebb típust definiáljuk önálló típusként a typedef kulcsszó segítségével, kerüljük az adatdeklaráció során a típusszármaztatást.