C中double**和double(*)[2]之间的差异



双精度**和双精度(*)之间有什么区别[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]传递给函数的正确方法是什么?

EDIT:调用代码

fftw_complex        *in;             /* typedef on double[2] */
in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * 1024);
pcmTocomplex(data, in);

double *outm[2]double (*outm)[2]不同。第一个是指针数组(在本文中相当于double **);第二个是指向数组的指针。

如果有疑问,请使用cdecl。

您需要将第二个参数类型更改为:

void pcmTocomplex(short *data, double (*outm)[2])

请注意,第二个参数已更改为double (*outm)[2]

还要注意,在您的代码中,参数中的double *outm[2]double **outm完全相同。

void pcmTocomplex(short *data, double *outm[2])

您在这个函数原型中看到的第二个参数暗示了双指针数组,而实际上并不是您想要的。

void pcmTocomplex(short *data, double (*outm)[2])

这就是你想要的样子,你期望的样子。

最新更新