Bueno a mi me enseñaron otra forma de manejar array multidimencionales, que es declarar un solo puntero, y hacer unas conversiones para transformar de una notación n-dimencional a la del array.
Explico con un ejemplo
- Código: Seleccionar todo
int filas=3, cols=2;
int *matriz;
matriz=new int[filas*cols];
for(int x=0;x<cols;x++)
{
for(int y=0;y<filas;y++)
{
int num=matriz[y*cols+x];//Accede a la coordenada x,y
}
}
Si quisieras hace lo contrario, partir del índice y obtener las coordenada, solo hay que hacer una divisiones:
x=i%cols;
y=i/cols;
donde i es el índice al que deseas acceder.
Al principio puede parecer tedioso, pero en realidad es muy fácil una vez que te acostumbras.
El hecho de manejarlo así es que cuando se declara int **matriz; y les asignas memoria en realidad se crean varias filas de memoria que pueden estar en distintos lados y esto hace que el acceso sea mas lento, en cambio al declararlo todo junto es mas rápido, también depende de como lo uses por que hacer esas divisiones puede tomas el mismo tiempo que acceder a los bloques de memoria por separado, pero bueno, por alguna razón, en los motores gráficos usan arrays y no matrices para guardar píxeles.
Si usas c++ para hacer lo que comentaste con memoria dinámica, los operadores new y delete te facilitan mucho la vida.
y en realidad apuntadores es fácil una ves que entiendes que son.
El conocimiento de unos es conocimiento de todos.