在函数中传递二维数组

Pass two dimensional array in function

本文关键字:二维数组 函数      更新时间:2023-10-16

我正在尝试在函数中传递二维数组,但是有两个我不知道为什么的错误。我有一些关于在函数中传递二维数组的文章,但也不明白为什么我失败了。

#include <iostream>
using namespace std;
// prototypes
void matrixSwap(double** matrix, int rows, int columns);
int main()
{
const int ROWS = 5;
const int COLUMNS = 5;
double matrix[ROWS][COLUMNS] =
{
{ 1,  2,  3,  4,  5},
{ 6,  7,  8,  9,  0},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
matrixSwap(matrix, ROWS, COLUMNS);
/* it says
1) argument of type "double (*)[5U]" is incompatible with parameter of type "double **"
2) 'void matrixSwap(double *[],int,int)': cannot convert argument 1 from 'double [5][5]' to 'double *[]'
*/
}
void matrixSwap(double** matrix, int rows, int columns) {}

您尝试传入函数matrixSwap()的多维double数组matrixdouble**,实际上并不表示多维数组。

正确使用数组,如下所示:

#include <iostream>
using namespace std;
const unsigned short MAXROWS = 5;
// prototypes
void matrixSwap(double matrix[][MAXROWS], int rows, int columns);
int main()
{
const int ROWS = 5;
const int COLUMNS = 5;
double matrix[ROWS][COLUMNS] =
{
{ 1,  2,  3,  4,  5},
{ 6,  7,  8,  9,  0},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
matrixSwap(matrix, ROWS, COLUMNS);
}
void matrixSwap(double matrix[][MAXROWS], int rows, int columns) {}

刚刚更改为[][MAXROWS]其中MAXROWS包含一个值为5的无符号整数。


声明:

void matrixSwap(double matrix[][MAXROWS], int rows, int columns)

相当于:

void matrixSwap(double (*matrix)[MAXROWS], int rows, int columns)

请注意,这里我使用了*matrix,然后附加了与matrix[][MAXROWS]相同的工作[MAXROWS]

因此,您可以通过以下另一种方式执行相同的操作:

void matrixSwap(double (*matrix)[MAXROWS], int rows, int columns) {
for (int i = 0; i < columns; i++) {
for (int j = 0; j < rows; j++) {
std::cout << matrix[i][j] << ' ';
}
std::cout << std::endl;
}
}

这将为您提供输出:

1 2 3 4 5 
6 7 8 9 0
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

查看新参数是否成功将matrix传递到函数中。