Witam
Do tej pory jak chciałem zalokować 2 wymiarową tablice to robiło się to tak:
const int n=5;
const int m=2;
int **array = new int*[n];
for(int i=0; i<m; ++i)
array[i] = new int [m];
...
for(int i=0; i<m; ++i)
delete [] array[i];
delete []array;
array = NULL;
Spotkałem się natomiast z takim czymś (akurat tutaj przykład z mallociem, ale analogicznie można i z new):
const int n=5;
const int m=2;
int (*array)[n][m] = (int (*)[n][m])malloc(sizeof(int)*m*n);
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
{
(*array)[i][j] = i + j;
std::cout << (*array)[i][j] << std::endl;
}
free(array);
Co to jest typ int (*array)[n][m]? Czy to jest wskaźnik na obszar pamięci n x m int-ów? Chyba nie bo dałem radę zalokować więcej niż "n" intów:
int (*array)[n][m] = (int (*)[n][m])malloc(sizeof(int)*m*(n+1));
i potem sie odwołać do wszystkich komórek pamięci i sie skompilowało i działało w runtimie. Więc może ten typ to wskaźnik na obszar pamięci n x m int-ów, ale taki powiedzmy "unsafe", czyli że tak czy siak możesz więcej tam zalokować niż n x m.