Tablice wielowymiarowe to nie są tablice wskaźników. Zwykła tablica wielowymiarowa posiada tylko jeden wskaźnik, którym jest nazwa tablicy. W przypadku tablicy wskaźników działa to trochę inaczej.
Patrycjerz w swoim obszernym wyjaśnieniu nie zahaczył o tablice wskaźników, więc ja to zrobię.
Tablica wskaźników, to tablica, której elementami są wskaźniki. Najczęstszym przykładem użycia takich tablic jest chęć przesłania tablicy wielowymiarowej nie znając żadnego z wymiarów. (Normalnie, aby przesłać tablicę, np.
int tab[ 4 ][ 5 ];
musimy funkcję zapisać tak:
int funkcja( int tab[][5] )
więc jak widać, tylko pierwszy wymiar może nie być podany. Pozostałe muszą. W przypadku tablic wskaźników te ograniczenia nie występują.
Dużą różnicą między zwykłą tablicą wielowymiarową, a tablicą wskaźników jest to, że dla każdego wskaźnika w takiej tablicy musisz po kolei rezerwować pamięć. To tak jakbyś miał w tablicy jedną kolumnę (wskaźników) i dla każdego elementu w tej kolumnie, od góry do dołu, musiał rezerwować w pamięci wiersz.
A teraz stworzenie tablicy o tych samych wymiarach co powyżej i przesłanie jej do funkcji.
int ** tab = new int* [ 4 ];
// Rezerwowanie w pamięci kolejnych wierszy
for( int i = 0; i < 4; i++ )
{
tab[ i ] = new int [ 5 ];
}
I teraz funkcja może przyjmować dowolną tablicę wielowymiarową.
int funkcja( int** tab, int wys, int szer );
// Lub: int funkcja( int* tab[], int wys, int szer );
// Lub: int funkcja( int tab[][], int wys, int szer );
Gdybym miał przedstawić tablicę wskaźników na schemacie, to zrobiłbym to tak:

Sama tablica tab zawiera tylko 4 wskaźniki. Te wskaźniki są dopiero 5-elementowymi tablicami. W ten sposób otrzymaliśmy dynamiczną tablicę 4 x 5.
Pozdrawiam.