【问题标题】:How Should i pass An 2d Array To an Function in c++ using pointers [duplicate]我应该如何使用指针将二维数组传递给c++中的函数[重复]
【发布时间】:2020-04-26 14:26:31
【问题描述】:

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

错误信息
Main.cpp:在函数'int main()'中:Main.cpp:15:23:错误:无法转换'int()[(((sizetype)(((ssizetype)c)+ -1))+ 1) ]' 到 'int' 为 参数 '1' 到 '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++,它们没有包含在那里的答案中。使用适当的多维数组(上面的答案给出了三种方法,具体取决于编译时已知的大小)。

标签: c++ arrays matrix multidimensional-array addition


【解决方案1】:

这些声明的数组

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

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 2016-04-27
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多