Если у вас есть такой массив
T a[10];
, то тип элементов массива - T.
Чтобы динамически выделить такой массив, вы должны написать
T *array = new T[10];
Давайте теперь определим T
как имя typedef следующим образом
typedef int T[4];
или
using T = int[4];
Так что это объявление
T *array = new T[10];
допустимо также и для этого typedef.
Теперь давайте заменим T на его определение typedef в обратном порядке. Мы получим
int ( *array )[4] = int[10][4];
Таким образом, оператор new выделяет двумерный массив с 10 «строками», каждая из которых, в свою очередь, является массивом из 4 целочисленных элементов.
Эта запись
int ( *array )[4]
означает указатель на массив (элемент двумерного массива) из 4 элементов.
Чтобы сделать его более понятным, давайте иметь массив, подобный
T a[N1][N2];
Это объявление двумерного массива вы можете переписать как
T ( a[N1] )[N2];
Оба объявления объявляют один и тот же двумерный массив.
Чтобы получить указатель на тип элемента массива, просто замените запись ( a[N1] )
на ( *p )
. Например
T ( a[N1] )[N2];
T ( *p ){N2] = a;