2016-04-24 46 views
-4

ポインタ引数を持つ関数を別の関数に引数として正しく渡して値を返すにはどうすればよいですか?ポインタ引数を持つ関数を別の関数の引数として使用する

I持っ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? 
} 

これは値を返す正しい方法でしょうか?私は "距離"機能のargumetsを "力"機能にも含める必要がありますか?

ありがとうございます!

+3

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

+0

ここでは、渡す引数は実際には' float * '型です。それで、私は型の隣にアスタリスクを書くことを好む理由です(コンマで宣言を使わないでください) – teivaz

+0

他の問題とは別に、 'distance'は2つの2要素配列を渡したいと思われます。それを呼び出す配列が2つありません。 (そして、2つの質量を与えられた任意の種類の距離を計算することは、次元的に信じられないようです。) –

答えて

1

最初の距離は、引数として2つのfloat *を取得する '関数ポインタ'でなければなりません。

return distance(m1, m2); 

と力を呼び出すときに最後に、単に引数として、あなたの関数の名前を渡しますので、実引数と力本体通話距離で、

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

第二に例えば「力」の署名を変更:

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プログラミング言語持つことができると仮定しても、関数ポインタなしでチューリング完全である、と関数ポインタは比較的まれにしか実際には使用されません。

関連する問題