如何传递函数的二维数组参数作为内部函数的参数



我发现了如何将二维数组作为参数传递给函数,然后对其元素进行操作。然而,我的情况更具体:一个函数有一个二维数组作为参数,它的主体包含另一个函数,该函数的参数就是同一个数组。这是我的代码:

#include <iostream>
using namespace std;
const double FLT_EPSILON=0.3;
bool areEqual(double a, double b, double epsilon)
{
return abs(a - b) <= ((abs(a) > abs(b) ? abs(b) : abs(a)) * epsilon);
}
double LineSUM(int N, double matrix[][N], int line)
{
double sum = 0;
for (size_t i = 0; i < N; i++)
{
sum = sum + matrix[line][i];
}
return sum;
}
double RowSUM(int N, double matrix[][N], int row)
{
double sum = 0;
for (size_t i = 0; i < N; i++)
{
sum = sum + matrix[i][row];
}
return sum;
}
//some other  irrelevant code
bool matrixIsMagicalSquare(int N, double matrix [N][N])
{
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++)
{
if (!areEqual(LineSUM(N, matrix, i), LineSUM(N, matrix, j), FLT_EPSILON))
{
return false;
}
}
}
//some other code
}
int main()
{
int N=0;
cin>>N;
double martrix[N][N];
//code to enter the elements of the array
cout<<matrixIsMagicalSquare(N, matrix);
}

试图编译代码返回"0";没有用于调用"LineSUM"的匹配函数;并且对于CCD_ 2具有相同的误差。出现此消息的原因是Line/RowSUM(称为matrix的数组(的参数显然与其定义中的类型不同。我做错了什么?请原谅我在这个问题上有什么不准确的地方。英语不是我的母语。

问题出在函数头中。括号内的参数值是非法的。更改代码以使用数组指针:

double LineSUM(int N, double** matrix, int line)
{
double sum = 0;
for (size_t i = 0; i < N; i++)
{
sum = sum + matrix[line][i];
}
return sum;
}
double RowSUM(int N, double** matrix, int row)
{
double sum = 0;
for (size_t i = 0; i < N; i++)
{
sum = sum + matrix[i][row];
}
return sum;
}
//some other  irrelevant code
bool matrixIsMagicalSquare(int N, double** matrix)
{
for (size_t i = 0; i < N; i++)
{
for (size_t j = 0; j < N; j++)
{
if (!areEqual(LineSUM(N, matrix, i), LineSUM(N, matrix, j), FLT_EPSILON))
{
return false;
}
}
}
//some other code
}
int main()
{
cin>>N;
double** matrix;
// You will now have to initialize matrix on the heap because
// you cannot initialize an array on the stack with a non-const size.
//code to enter the elements of the array
cout<<matrixIsMagicalSquare(N, matrix);
}

最新更新