我有一个需要**的函数,而我定义的指针是* 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**)’
答案 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
。