我应该如何使用指针将一个二维数组传递给C++中的一个函数 [重复]。

问题描述 投票:0回答:1

我无法在C++中传递通过以下方式初始化的2D数组。main 功能,以 addMatrix 功能。

ERROR MESSAGE Main.cpp: 在函数'int main()'中。Main.cpp:15:23: 错误:无法将参数'1'的'int ()[((((sizetype))(((sizetype)c) + -1)) + 1)]'转换为'int',改为'void addMatrix(int, int*, int, int)' addMatrix(a,b,r,c)。

void addMatrix(int**, int**, int, int);

int main()
{   
  int r, c, i, j;
  cin >> r >> c;
  int a[r][c], b[r][c];
  // ASSUME HAVE TAKEN INPUTS FROM BOTH THE MATRIX A AND B
  addMatrix(a, b, r, c);
}

void addMatrix(int** a, int** b, int r, int c)
{ 
  int i, j, d[r][c];

  for(i = 0; i < r; i++)
     for(j = 0; j < c; j++)
        d[i][j] = a[i][j] + b[i][j];

  for(i = 0; i < r; i++)
  {
     for(j = 0; j < c; j++)
        cout << d[i][j] << " ";
     cout << endl;
  }
}
c++ arrays matrix multidimensional-array addition
1个回答
0
投票

这些声明的数组

int a[r][c],b[r][c];

中使用的表达式,例如函数参数被隐式地转换为指向其类型的第一个元素的指针。int ( * )[c].

然而,相应的函数参数的类型为 int **.

void addMatrix(int **,int **,int,int);

所以编译器会发出一个错误,因为这些类型不兼容。

注意,可变长度数组不是标准的C++功能。

请使用类模板的对象来代替 std::vector.

如果你的编译器支持可变长度的数组,那么函数的声明应该是这样的

void addMatrix( int, int, int [][*], int [][*] );

或者,如果声明与函数定义同时进行,那么

void addMatrix( int r, int c, int [][c], int [][c] );

void addMatrix( int r, int c, int [r][c], int [r][c] );
© www.soinside.com 2019 - 2024. All rights reserved.