Небольшой вопрос о структуре динамического c многомерного массива в C ++ - PullRequest
1 голос
/ 08 апреля 2020

Что именно повторяет [4] в этом объявлении динамического c многомерного массива?

int (*array)[4] = new int[10][4];

1 Ответ

3 голосов
/ 08 апреля 2020

Если у вас есть такой массив

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;
...