/*
EJEMPLO 11.3.
Reserva dinámica de memoria interactiva para matrices.
Tratamiento como puntero a puntero de un tipo dado
Se asigna memoria dinámica a una matriz cuadrada de
mension n*n, rellenando la matriz con datos fijos y
visualizando la matriz de la forma estándar y con punteros.
*/
#include <iostream>
#include <cstring>
using namespace std;
typedef int* col; // col es un sinónimo de puntero a entero
int main()
{
int n;
int **m; // m es un puntero que apunta a punteros a enteros
cout<<"Introduza dimension de m: ";
cin>>n;
m = new int*[n]; // reserva de memoria para n punteros enteros
for(int i=0; i<n; i++){
m[i] = new int[n]; // m[i] puntero a vector de n enteros
// m puntero a puntero de enteros
for(int j=0; j<n; j++)
m[i][j] = 18*(i+1)+j;
}
cout<<"visualización matriz con indexación: "<<endl;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
cout<<" "<<m[i][j]; // indexación tipo matriz
cout<<endl;
}
cout<<"visualización matriz con punteros: "<<endl;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
cout<<" "<<*(*(m+i)+j); // también válido con *(m[i]+j)
cout<<endl;
}
// Liberacion de la memoria asignada
for(int i=0; i<n; i++)
delete m[i];
delete [] m;
return EXIT_SUCCESS;
}