我有一个带有3个参数的函数,第一个是** double。
normalizeDataZeroMeanUnitSD(double ** trainingActions, int numberOfTrainingActions, int descriptorDimension)
当我从main调用它时,我试图使用normalizeDataZeroMeanUnitSD(data,681,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数组。