int (*arr)[5]
: arr
это указатель , указывающий на массив из 5 целых int (*p)[2][2] = c;
: p
это указатель , указывая на массив из 2, причем каждая строка имеет массив из 2 ints
Как это работает? Посмотрите на следующий простой пример:
int (*array)[2] = new int[3][2];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
array[i][j] = i + j;
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << array[i][j] << ' ';
cout << '\n';
}
Вывод:
0 1
1 2
2 3
Зачем нужны скобки?
Рассмотрим:
int *arr[3];
Здесь arr
- это массив размером 3, который может хранить 3 указателя. Итак, это массив указателей. См .:
int a = 10;
int b = 20;
int c = 30;
arr[0] = &a; //arr[0] pointing to a
arr[1] = &b; //arr[1] pointing to b
arr[2] = &c; //arr[2] pointing to c