next up previous contents
Elõre: Kapcsolat tömbök és mutatók Fel: Mutatók és tömbök Vissza: Pointer aritmetika

Tömbök használata. Többdimenziós tömbök

A C nyelv megengedi, hogy bármilyen adattípusból tömböt hozhassunk létre. Létezhetnek tehát struktúrákból álló tömbök, pointerek tömbjei, sõt, tömbökbõl alkotott tömbök is. Ezek deklarátorai illetve kifejezései a mutatóknál megismert "ökölszabály" analógiájára hozhatók létre: minden szinkaktiakailag helyes kifejezésben bármely azonosító lecserélhetõ egy

        azonosító[kifejezés]

alakra - más szóval alkalmazzuk a [ ] tömbtípust képzõ típusmódosító operátort a deklarációnál. Például:

           int i;                int ti[4];
           struct tanulo tan;    struct tanulo osztaly[40];
           char *p;              char *tp[10];
           int (*pf)(int);       int (*tpf[5])(int);
           float vekt[20];       float mat[5][20];
Az elsõ két példa már ismerõs, a következõ kettõ mutatókból álló tömbök deklarációját illusztrálja. A tp karaktermutatók 10 elemû tömbje, tpf pedig olyan pointerekbõl felépített 5 elemû tömb, amelyek egészeket viszszaadó és egy egész paramétert váró függvényekre mutatnak. A fenti deklarációk szerint érvényes kifejezések a következõk:
          p = tp[2]
          tp[0]
          *(tp[8] + 1)
          --tp[8]
          pf = tpf[4]
          (*tpf[2])(0)
Az utolsó példa többdimenziós tömbök definiálását mutatja be. A C fordító nem ismeri ugyan a többdimenziós tömböket, de a tömbök tömbjeit igen. Az alábbi mat változó egy 5 sorból és 20 oszlopból álló mátrixnak tekinthetõ:
            float mat[5][20];
Ez például a következõ kifejezésekben szerepelhet:
            vekt[3] = mat[1][2]
            mat[i][j] = 0.0
Többdimenziós mátrixoknak kezdõértéket adni a szokásos aggregátum inicializáló szintaxissal lehet:
            short tomb[ ][3] = {
                                 { 1, 2, 3 },
                                 { 4, 5, 6 },
                                 { 7, 8, 9 },
                                 { -1, -2, -3 }
                               };
A tomb változó e definíció hatására egy 4 sorból és 3 oszlopból álló kétdimenziós tömb lesz a fenti kezdõértékekkel. Figyeljük meg, hogy az indexméretek közül csak az elsõt hagytuk el, a fordítóra bízva annak meghatározását a kezdõértékek alapján. A második (és esetleges további) indexhatárok megadása mindig kötelezõ. Pontosan ez a többdimenziós tömbök legnagyobb hátránya, nem lehet õket dinamikusan kezelni. Nem írhatunk segítségükkel például olyan függvényt, amely egy n*r-es mátrixot öszszeszoroz egy r*m-essel, ahol a mátrixokon kívül n, r és m is paraméterek.