• ベストアンサー

関数へのポインタ

C言語で科学計算をやらなければならない状況になりました。 そこで質問です。 ものすごく基本的なことだと思うのですが・・・ aからbまで積分をするルーチンが以下のように与えられています。 float qromb(float (*func)(float), float a, float b) { ・・・・・ } これを使うときの呼び出し方がわからないのです。 a,bは積分の下限・上限なので例えば 0,1 として、 s= qromb(float (*func)(float), 0, 1 ); のようにすればいいと思うのですが、 (*func)(float) の部分がよくわかりません。 例えば、f(x)=x を0~1で積分するようなときは、 どのような宣言をして、どのようにルーチンを呼び出せばいいのでしょうか。 またこの(*func)(float) は何を意味しているのでしょうか? とても基本的なことだとは思うのですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#5537
noname#5537
回答No.1

float (*func)(float) とあれば,func は float 型の引数を1つとって, float 型の戻り値を返す関数へのポインタです。 というわけで,float 型の引数を1つとって, float 型の戻り値を返す関数を定義して, そのポインタを qromb に渡せばいいです。 float f(float x) {   return x; } // s = qromb(f, 0, 1);

yassan_yassan
質問者

お礼

早速の回答ありがとうございます。 分かりました。 引数宣言の中にさらに()が入っているのを見るのが初めてだったもので。 やっぱりC言語はポインタがキーですよね? 使えるように勉強します・・・

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ret
  • ベストアンサー率40% (8/20)
回答No.2

#1の方が説明されていますね。 関数名を引数としてそのまま渡せばいいです。 qsort関数もこのうちの一つですね。 void qsort ( void * base, size_t num, size_t width, int (*fncompare)(const void *, const void *) ); float qromb(float (*func)(float), float a, float b); とあれば 引数にfloatを1つ取り、float型を戻り値とする関数を 別に用意しなければいけません。

yassan_yassan
質問者

お礼

ありがとうございました。 できました。

すると、全ての回答が全文表示されます。

関連するQ&A