| Вопрос:  
 Как сделать передачу двумерного массива через параметр функции? 
 
 Ответ:  
 Либо создаёшь массив динамически: 
 int ** arr; arr = new int*[M] for(i = 0; i<M; ++i)     arr = new int[N]; 
 Тогда можно написать функцию: 
 int f(int **a) {   ...    a[j]   ...  } 
 и использовать её прямо: f(arr); 
 Если же твой двумерный массив статический, то тебе обязательно нужно в объявлении функции указать одну (вторую) размерность: 
 f2(int a[][5]); 
 main() {   int arr[3][5];   f2(arr); } 
 
 Дальнейшее обсуждение 
 ZufuS:  Вот она, моя функция: 
 float det(float p[][], int n) {   if(n==1) return p;   float det=0;   for(int i=0; i<n; i++) {     add[n-1][n-1];     for(int y=1; y<n-1; y++) {       for(int x=0; x<-1; x++) {         if(x==i) continue;         if(x<i)  add[х][y-1] = p[y][х];         else  add[х-1][y-1] = p[y][х];       }     }     if(p[i][0]%2) p[i][0] = -p[i][0];     det += p[i][0]*det(add, n-1))   }   return det; } 
 Попытался перевести на указатели, получилось вот что: 
 float det(float **p, int n) {   if(n==1) return **p;   float det=0;   for(int i=0; int m=n>i; i++) {     float **add = new float*[n-1];     for(int i=0; i<n-1; i++) add[i] = new float[n-1];     for(int y=1; y<n-1; y++) {       for(int x=0; x<-1; x++) {         if(x==i) continue;         if(x<i) add[х][y-1] = p[y][х];         else add[х-1][y-1] = p[y][х];       }     }     if(i%2) p[i][0] = -p[i][0];     static float det;     det += p[i][0]*det(add, n-1); // вот здесь ошибка, не хочет вызываться   [C++ Error] Call of nonfunction   }   return det; } 
 А ещё можно ли как-нибудь за счёт параметра n указать сразу в параметре массива его размерность типа (n, m[n][n]). 
 
 artursa:  Я делаю так: 
 void func(char mas[10][5]); { ... } 
 main() {  char mas[10][5];  func(mas); } 
 
 melkiy:  Ну, какие есть замечания: 
 1) Зачем тебе две переменных det - одна static, другая auto ?? 2) Почему переменная det называется так же, как и функция? Или в латинском алфавите букв мало  :? Тогда используй знак подчёркивания и цифры  (цифры - не в начале). Компилятор, собственно, на это и ругается. 
 3) Если ты выделил память под  переменную с помощью оператора new, то, когда она больше не нужна, освободи ресурс оператором delete. Пример 
 int* pa = new int; ... cout << *pa; delete pa; 
 
 Используй оператор delete[] для освобождения памяти для целого массива. Для двумерного массива это будет выглядеть так: 
 float **add = new float*[n-1]; for(int i=0; i<n-1; i++)   add[i] = new float[n-1]; ... ...   for(i=0; i<n-1; i++)    delete[] add[i];   delete[] add; 
 
 |