C语言中double **和double (*)[2]的区别

4

双星号(double **)和双括号号(double (*)[2])有什么区别?

如果我理解正确的话,双星号是指向双精度浮点数的指针,可以是任意大小的二维数组,而双括号号是指向双精度浮点数数组的指针[2]。

所以,如果我的理解是正确的,如何将其成功地传递给函数呢?

例如:

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

如果我将一个双精度 (*)[2] 作为参数传递,我会收到以下警告:
warning: passing argument 2 of ‘pcmTocomplex’ from incompatible pointer type
note: expected ‘double **’ but argument is of type ‘double (*)[2]

什么是将双重(*)[2]传递给函数的正确方法?
编辑:调用代码
fftw_complex        *in;             /* typedef on double[2] */
in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * 1024);

pcmTocomplex(data, in);

2
展示调用代码。 - Karoly Horvath
1
double*[2] 不同于 double (*)[2] - CB Bailey
阅读comp.lang.c FAQ的第6节。 - Keith Thompson
可能是如何在C++中使用数组?的重复问题。 - fredoverflow
3个回答

3

double *outm[2] 不同于 double (*outm)[2]。第一个是指针数组(在这种情况下等同于double **);第二个是指向数组的指针。

如果有疑问,请使用cdecl


2

你需要将第二个参数类型更改为以下内容:

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

请注意第二个参数已更改为double (*outm)[2]
请注意,在您的代码中,参数中的double *outm[2]double **outm是完全相同的。

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

这个函数原型中的第二个参数,看起来是指双指针数组,而不是你实际想要的。

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

如果想要达到你的期望,就应该长成这个样子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接