如何将1D指针发送到需要c ++中的2D指针的函数?

时间:2017-05-04 21:02:56

标签: c++ pointers

我有一个需要**的函数,而我定义的指针是* double,如何将它发送给函数?示例代码如下,

void eig(int n, double **A);
int main(){
  int DIM=5;
  double *HMAT = new double [DIM*DIM];
  eig(DIM,HMAT);
  delete [] HMAT;
}

void eig(int n, double **A) {}

编译抱怨

main.cc:8:15: error: cannot convert ‘double*’ to ‘double**’ for argument ‘2’ to ‘void eig(int, double**)’

2 个答案:

答案 0 :(得分:0)

我认为误解是void eig(int n, double **A)并不表示指向2D数组的指针"但指向指向double值的指针。 根据您在函数A中对eig所做的操作,这可能有意义或不有意义:如果eig是关于分配或重新分配新数组,那么您使用{ {1}}以便将新分配的内存传回给调用者。但是,如果您只想访问数组的值,则只需传递一个指向数组的指针(而不是指向指针的指针)。请参阅以下代码解释差异。希望它有所帮助。

double **A

答案 1 :(得分:0)

您误读了错误消息。请注意行号:问题不在于调用eig,而是由double**创建的new *[DIM*DIM]HMAT的分配,其类型为{{1} }}。要解决该错误,请将double*的类型更改为HMAT