2012-03-09 59 views
2

双**和双(*)[2]之间的区别是什么?如果我理解的很好,double **是指向double指针的指针,所以它可以是任意大小的二维数组,而double(*)[2]是指向double [2]的数组的指针]。C中的双**和双(*)[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]’ 

什么是要通过正确的方式一个double(*)[2]函数?

编辑:调用代码

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

pcmTocomplex(data, in); 
+2

告诉我们调用代码 – 2012-03-09 11:15:45

+1

'double * [2]'与'double(*)[2]'不一样。 – 2012-03-09 11:22:55

+0

阅读[comp.lang.c常见问题](http://c-faq.com/)的第6部分。 – 2012-03-09 11:25:15

回答

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

这第二个参数,你在这个函数原型看到意味着双指针数组,而不是你想要什么实际。

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

这应该是什么样子,如果你想要的,你的期望。

2

你需要第二个参数类型改成这样:

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

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

另请注意,在您的代码中,double *outm[2]的参数为,确切地说double **outm相同。

3

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

如有疑问,请使用cdecl

相关问题