//Create your pointer
int **ptr;
//Assign first dimension
ptr = newint*[5];
//Assign second dimension
for(int i = 0; i < 5; i++)
ptr[i] = newint[5];
The number of * kinda tell you how many pointers deep you are going. *ptf is a pointer to a data member, **ptr is a pointer to a pointer, and ***ptr is a pointer to a pointer to a pointer. Allocating space for the arrays is pretty easy, as seen above. That is an example of a dynamic 2d array. I could give an example of a 3d array if you want.