Вы объявили двумерный массив.
int Arr[rows][column];
Используется в выражениях, как в этом вызове функции
find_saddle_point((Arr,rows);
, он неявно преобразуется в указатель на свой первый элемент и имеет тип int ( * )[column]
.
Однако соответствующий параметр имеет тип int *
и неявное преобразование из типа int ( * )[column]
в тип int *
.
void find_saddle_point(int *,int);
, поэтому компилятор выдает ошибку.
Что касается вашего временного "решения"
find_saddle_point(((int *)Arr,rows);
, то это может привести к неопределенному поведению.
Объявить функцию как
void find_saddle_point( int, int, int [][*]);
В ее определении вы должны указать имена параметров.
void find_saddle_point( int row, int column, int [][column])
{
// ...
}
Также для измерений массивов лучше использовать тип size_t
вместо типа int
.
Вот демонстрационная программа.
#include <stdio.h>
void find_saddle_point( size_t, size_t, int a[][*] );
void fill( size_t rows, size_t cols, int a[][cols] )
{
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ )
{
a[i][j] = i * cols + j;
}
}
}
int main(void)
{
size_t rows = 3;
size_t cols = 5;
int a[rows][cols];
fill( rows, cols, a );
for ( size_t i = 0; i < rows; i++ )
{
for ( size_t j = 0; j < cols; j++ )
{
printf( "%2d ", a[i][j] );
}
putchar( '\n' );
}
return 0;
}
Выходные данные:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
Конечно, первое объявление функции в этой простой программе является избыточным и показано только для демонстрации того, как функция с параметром имеет тип переменной массив длины может быть объявлен.