When an array is being allocated then the left side of a new expression shall have type pointer to an element of the array. For example
int *p = new int[10];
Here element of the array has type int. So in the left side of the expression there is pointer to int that is int *.
For multidimensional arrays of dimension N their elements are arrays of dimension N - 1.
So for two dimensional array there shall be a pointer to one dimensional array in the left side of a new expression. The record int ( *p )[10] defines a pointer to a one dimensional array of 10 elements.