首页 > 解决方案 > 我应该如何使用指针将二维数组传递给 c++ 中的函数

问题描述

我无法将由main函数初始化的 C++ 中的二维数组传递给addMatrix函数。

错误消息
Main.cpp:在函数 'int main()' 中:Main.cpp:15:23:错误:无法转换 'int ()[(((sizetype)(((ssizetype)c) + -1)) + 1)]' to 'int' for argument '1' to '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++arraysmatrixmultidimensional-arrayaddition

解决方案


这些声明的数组

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] );

推荐阅读