double **和double(*)[2]之间有什么区别。
如果我理解的话,double **是指向double的指针,因此它可以是任何大小的2D数组,而double(*)[2]是指向double数组的指针[2]
因此,如果它是正确的,它如何成功传递给函数。
例如:
void pcmTocomplex(short *data, double *outm[2])
如果我将double(*)[2]作为参数传递,我会收到以下警告:
warning: passing argument 2 of ‘pcmTocomplex’ from incompatible pointer type
note: expected ‘double **’ but argument is of type ‘double (*)[2]’
将double(*)[2]传递给函数的正确方法是什么?
编辑:调用代码
fftw_complex *in; /* typedef on double[2] */
in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * 1024);
pcmTocomplex(data, in);
答案 0 :(得分:3)
double *outm[2]
与double (*outm)[2]
不同。第一个是指针数组(在此上下文中相当于double **
);第二个是指向数组的指针。
如有疑问,请使用cdecl。
答案 1 :(得分:2)
您需要将第二个参数类型更改为:
void pcmTocomplex(short *data, double (*outm)[2])
请注意,第二个参数更改为double (*outm)[2]
。
另请注意,在您的代码中,参数中的double *outm[2]
与double **outm
完全相同。
答案 2 :(得分:1)
void pcmTocomplex(short *data, double *outm[2])
你在这个函数原型中看到的第二个参数意味着双指针数组,而不是你想要的。
void pcmTocomplex(short *data, double (*outm)[2])
如果你想要它,你应该怎么样。