2011-11-03 37 views
2

我有以下簽名的函數:錯誤:類型的變量「浮動(*)[1]」與類型的參數不兼容的「浮動**」

float* Interpolate(float t, UINT iOrder, UINT iDimension, float** ppPointsArray); 

當試圖調用它作爲如下:

float ppfValues[2][1]; 
ppfValues[0][0] = 0.0f; 
ppfValues[1][0] = 10.0f; 

float* pfResult = MyMathFuncs::Interpolate(0.5f,2,1,ppfValues); 

我得到以下錯誤:

Error: argument of type float(*)[1] is incompatible with parameter of type "float**" 

如果我要正確地調用它,我應該做這樣的:

float** ppfValues = new float*[2]; 
ppfValues[0] = new float(0.0f); 
ppfValues[1] = new float(10.0f); 

float* pfResult = MyMathFuncs::Interpolate(0.5f,2,1,ppfValues); 

現在的問題是:我想漂浮[X] [Y]竟是同爲float ** 他們爲什麼不是?技術原因是什麼?那麼他們到底是什麼呢?

+1

首先,你需要解釋爲什麼你雖然是'浮[X] [Y]'是同一個'浮動* *'。一旦我們瞭解到您的困惑的來源,我們可以直接解決它。那麼,是什麼讓你認爲'float [x] [y]'和float **'一樣呢? – AnT

+0

@AndreyT我總是這麼認爲,因爲在學校裏我們已經被教導過,char a []實際上與char * a相同;直到現在(兩個暗淡的arr)總是可以通過char [] a;作爲一個函數的參數需要char * a – xcrypt

+0

那麼,你必須忘記你在學校教過的東西,因爲它是完全不正確的。在一般情況下,'char a [N]'與'char *'不是相同的。前者是*可轉換*到後者,但不一樣。一旦理解了一維數組的差異(請參閱接受答案中的C FAQ鏈接),2D數組(3D等)的情況也應該清楚。 – AnT

回答

7

I thought float[x][y] was actually the same as a float**

這一切都歸結爲一個事實,即數組和指針是不等價的。下面是C FAQ的列表(即使這是一個C++問題),它以各種方式強調這一事實。

+0

那麼動態數組呢?我們可以把它們當作指針嗎? – xcrypt

+0

@xcrypt如果你通過動態數組瞭解你通過'new' /'malloc'獲得的東西,那麼是的,那些*就是*指針。 – cnicutar

+0

我的意思是你通過「new []」而不是「new」獲得的東西。 例如:int * a = new int [50]; – xcrypt

相關問題