#include #include int main() { int i; const int maxsize = 100; /* Kétdimenziós tömbök */ float tomb_statikus[100][100]; float tomb_valtozo_meretu_de_a_gcc_nem_szereti[maxsize][maxsize]; /* * Mivel a program futása során tudjuk meg a maxsize -t (tegyük fel, hgoy így van) * dinamikusan kell (így a leghelyesebb, így ragaszkodunk a szabványhoz, és így lesz hordozható a kódunk ) * helyet foglalni a kétdimenziós tömbünknek. * * A kétdimenziós tömb olyan egydimenziós tömb, amelynek minden eleme egy egydimenziós tömb. * * egydimenziós tömböt tudunk dinamikus létrehozni : * float *tomb = (float*)calloc(meret, sizeof(float)); * -> tehát az első egydimenziós tömb elemeit (egydimenziós tömböket) létre tudjuk hozni. * azaz a deklarációnk nézhetne így is ki : float *tomb[meret] (hiszen ez egy pointerekból álló tömb.) * Ezzel nem kerültük ki a meret kiírását -> * csináljunk egy pointert erre a tömbre : float **tomb. * * És KÉSZ! * * */ /* Egy olyan pointer, amely egy pointerre mutat, amely egy float tipusú változó címét tudja tárolni. */ float **tomb_dinamikus; /* Foglaljuk le a helyet a külső tömbnek, azaz hozzunk létre egy olyan egydimenziós tömböt, * amelynek az elemei olyan pointerek, melyek float változók címeit tudják tárolni*/ tomb_dinamikus = (float**)calloc(maxsize, sizeof(float*)); /* Magyarázat : (float**) : mivel calloc egy void* -al tér vissza, helyes, ha típuskonverziót hajtunk végre. * mi a típusa tomb_dinamikus -nak? float**. * sizeof(float*) : minden egyes indexén a tomb_dinamikus tömbnek egy * float-ra mutató pointert akarunk tárolni. * Ezért az alaptípusának a mérete float*, tehát ennek a méretét kell megadnunk. * */ /* Foglaljunk helyet a most létrehozott tömb elemeinek (hiszen azok is pointerek) */ for(i = 0; i< maxsize; i++) tomb_dinamikus[i] = (float*)calloc(maxsize, sizeof(float)); /* Magyarázat : (float*) : mivel calloc egy void* -al tér vissza, helyes, ha típuskonverziót hajtunk végre. * mi a típusa tomb_dinamikus[i] -nek? float* . * sizeof(float) : minden tomb_dinamikus[i] egy float-ra mutató pointer. * Ezért az alaptípusának a mérete float, tehát ennek a méretét kell megadnunk. * */ tomb_dinamikus[2][5] = 12.45; printf("%f\n",tomb_dinamikus[2][5]); /* Ha már nem használjuk a tömbünket, fel kell szabadítani az általunk lefoglalt memóriaterületet. * * Először a pointereket tartalmazó tömbben lévő pointereket kell felszabadítanunk, majd utána a tömbnek lefoglalt memóriaterületet. * */ for(i = 0; i< maxsize; i++) free(tomb_dinamikus[i]); free(tomb_dinamikus); return 0; }