Re[8]: Преобразование указателей
От: Андрей Тарасевич Беларусь  
Дата: 14.12.01 21:44
Оценка: 3 (1)
Здравствуйте 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; 
}


Но переменным при такой передаче будет только первый размер массива. Остальные будут фиксированы.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.