Здравствуйте Punk, Вы писали:
ЮБ>>Ежли Punk-у надо передавать в функцию int **ptr
ЮБ>>То ему придется отказатся от записей типа int a[2][2]
ЮБ>>А расписать инициализацию **ptr ручками
ЮБ>>А опосля освободить все что можно
P>Я и так понял, что так не получится.
P>Просто интересно в чём глюк был
В общем, вся фишка в том, что тип 'массив' имеет совойство во многих случаях деградировать до типа 'указатель на элемент массива'. Массив 'int a[N]' при этом превращается в указатель 'int*', а массив 'int a[M][N]' превращается в указатель 'int (*)[N]' (а не в 'int**'). Это можно использовать при передаче массива в функцию:
void conv(int s, int (*a)[2])
{
for (int i = 0; i < s; i++)
for (int j = 0; j < 2; j++)
printf("%d\n", a[i][j]);
}
int main()
{
int a[2][2];
a[0][0] = 7;
a[0][1] = 4;
a[1][0] = 2;
a[1][1] = 9;
conv(2, a);
return 0;
}
Но переменным при такой передаче будет только первый размер массива. Остальные будут фиксированы.