2016-04-24 175 views
-4

如何正確地將帶指針參數的函數作爲參數傳遞給另一個函數並返回值?使用帶指針參數的函數作爲另一個函數的參數

我有一個函數採用兩個參數中的指針的形式2門陣列(POS1和POS2):

float distance(float *pos1, float *pos2){ 
    return sqrt(pow((pos1[0]-pos2[0]),2)+pow((pos1[1]-pos2[1]),2)); 
} 

我想通過這個函數作爲參數傳遞給另一個功能:

float force(float mass1, float mass2, float(*distance)(float,float), float scaling, float *pos1, float *pos2){ 
    return distance(*pos1, *pos2); // how to correctly return the value? 
} 

這是返回值的正確方法嗎?我是否還需要在「強制」功能中包含「距離」功能的參數?

謝謝!

+3

'return distance(mass1,mass2);' – user657267

+0

這裏的事情是你傳遞的參數實際上是'float *'類型。這就是爲什麼我更喜歡在類型旁邊寫星號(而不是用逗號聲明) – teivaz

+0

除了其他問題,'距離'似乎想要傳遞兩個2元素數組。你沒有兩個數組來調用它。 (並且計算出任何兩種質量的距離似乎都是不可信的。) –

回答

1

第一個距離必須是一個'函數指針',它將兩個float *作爲參數。因此,改變「強制」簽名

float force(float m1, float m2, float (*distance)(float*, float*), float scaling) 

其次,在實際參數的力體通話距離,例如:

return distance(m1, m2); 

最後,呼籲力時簡單地傳遞你的函數作爲參數的名稱:

x = force(y,z,&distance, scale); 

函數名稱前面的&符號通常是可選的。

我希望有幫助。

-1

您不需要將某個功能「傳遞」給另一個功能,因爲您可以在另一箇中「調用」一個功能。我想你可以簡單地有

float force(float mass1, float mass2, float scaling, float pos1, float pos2){ 
    float dis = distance(pos1, pos2); 
    ...... 
} 

C編程語言是圖靈完備,即使沒有函數指針,以及函數指針幾乎很少在實踐中使用。