我有一个带有3个参数的函数,第一个是** double。

 normalizeDataZeroMeanUnitSD(double ** trainingActions, int numberOfTrainingActions, int descriptorDimension)

当我从main调用它时,我试图使用normalizeDataZeroMeanUnitSD(data,68​​1,24);但是,我收到
cannot convert parameter 1 from 'double [681][24]' to 'double **'

这就是我构造数据数组的方式:
fstream infile;
infile.open("gabor\\Data.txt");

double data[681][24];

while (!infile.eof())
     {
        for(int j=0;j<681;j++)
        {
            for(int k=0; k<24;k++)
            {

                infile >> data[j][k];

           }

        }

 }
 infile.close();

有没有办法使用** data做同样的事情?

最佳答案

使用以下任何声明。两者是等效的。

NormalizeDataZeroMeanUnitSD(double trainingActions[][24], int numberOfTrainingActions, int descriptorDimension)

NormalizeDataZeroMeanUnitSD(double trainingActions[681][24], int numberOfTrainingActions, int descriptorDimension)

声明2D数组时,它将占用连续的内存位置。因此,您至少需要指定列数(以行为主的体系结构)。

对于行专业和列专业定义,请查看this

对于已编辑的问题,可以,您可以使用**data进行声明。动态分配data数组。但是请记住,使用完毕后将其释放。
double **data=new double*[681];
for (int i=0;i<681;i++)
{
  data[i]=new double[24];
}

//do what you want to do


for (int i=0;i<681;i++)
{
  delete [] data[i];
}

delete [] data;

现在,您的函数原型(prototype)可以像void func(double **pp)一样,因为data是一个指针,而不是2D数组。

09-09 23:56
查看更多