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.0Tö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.