Здесь у вас есть переменная arr
с типом array of 5 int
:
int arr[] = { 3, 5, 6, 7, 9 };
Здесь вы объявляете указатель ptr
на array of 5 int
:
int (*ptr)[5]
Это получает адрес arr
с типом pointer to array of 5 int
&arr
, и это назначение работает, так как типы указателей равны:
int (*ptr)[5] = &arr;
Теперь, если вы измените типptr
другому типу, то есть pointer to array of 6 int
:
int (*ptr)[6];
, тогда назначение больше не работает, так как типы указателей теперь не соответствуют.Вот почему вы получаете ошибку.
Примечание: [5]
в этом коде не индексирует что-либо, но является лишь частью объявления переменной (количество элементов в массиве)