Niestety, nie wiem jak to jest w C++, ale w C przy tablicy alokowanej dynamicznie masz tylko indeksy jednowymiarowe, gdyż alokujesz po prostu blok pamięci. Możesz sobie zaalokować statycznie matrycę o wymaganych wymiarach, a potem nadpisać pamięć przez nią zajmowaną danymi z pamięci tablicy dynamicznej (memcpy), ale nie wiem czy warto marnować pamięć i cykle tylko po to, aby móc się później odwoływać do komórek poprzez indeksy. Uwaga! C++ może mieć jakieś mechanizmy, które to umożliwią. Z pewnością spece od tego języka się tu wypowiedzą w takim przypadku.
Nieco chaotyczny przykład z dynamiczną alokacją pamięci w funkcji:
#include <stdio.h>
#include <stdlib.h>
int *fun(int rows, int cols)
{
int *tab, row, col;
if ( (tab = (int*)calloc(cols * rows, sizeof(int))) == NULL )
return NULL;
for ( row = 0; row < rows; row++ )
for ( col = 0; col < cols; col++ )
tab[row * cols + col] = 10 * (row + 1) + col;
return tab;
}
int main(void)
{
int *data, row, col;
if ( (data = fun(5, 2)) == NULL ) {
perror("fun()");
return 1;
};
for ( row = 0; row < 5; row++ )
for ( col = 0; col < 2; col++ )
printf("%d\n", data[row * 2 + col]);
free(data);
return 0;
}