我有以下簽名的函數:錯誤:類型的變量「浮動(*)[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 ** 他們爲什麼不是?技術原因是什麼?那麼他們到底是什麼呢?
首先,你需要解釋爲什麼你雖然是'浮[X] [Y]'是同一個'浮動* *'。一旦我們瞭解到您的困惑的來源,我們可以直接解決它。那麼,是什麼讓你認爲'float [x] [y]'和float **'一樣呢? – AnT
@AndreyT我總是這麼認爲,因爲在學校裏我們已經被教導過,char a []實際上與char * a相同;直到現在(兩個暗淡的arr)總是可以通過char [] a;作爲一個函數的參數需要char * a – xcrypt
那麼,你必須忘記你在學校教過的東西,因爲它是完全不正確的。在一般情況下,'char a [N]'與'char *'不是相同的。前者是*可轉換*到後者,但不一樣。一旦理解了一維數組的差異(請參閱接受答案中的C FAQ鏈接),2D數組(3D等)的情況也應該清楚。 – AnT