2012-03-09 58 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

相關問題