value=(*func)(*ax)
参考にしたいある関数mnbrakの定義は,次のようになっています.
void mnbrak(float *ax, float *bx, float *cx, float *fa, float *fb, float *fc,
float (*func)(float))
{
float ulim,u,r,q,fu,dum;
*fa=(*func)(*ax);
*fb=(*func)(*bx);
if (*fb > *fa) {
・・・
}
(中略)
}
ここで知りたいことは,
この中の「*fa=(*func)(*ax);」という文を実行するために必要な呼び出し側のプログラム例です.
そこで,次のようなプログラムを作成してみました.
/* test.c */
#include <stdio.h>
float quad(float alf)
{
float z;
z=(10.0+alf*5.0)*(10.0+alf*5.0);
return z;
}
int main()
{
float* ax;
float value;
float alpha;
float (*func)();
alpha=1.0;
ax=α
func=quad;
value=(*func)(*ax);
printf("value=%f\n",value);
return 0;
}
このプログラムtest.cを実行すると,期待する答えの225すなわち(10.0+5.0)*(10.0+5.0)にならずに,100すなわち10.0*10.0となってしまいました.
デバッグモードで,上記の文「value=(*func)(*ax);」を実行するすると,ちゃんとquadへ飛んで行くのですが,引数「1.0」をquadに渡すことができずに,quad側では,alf=0.0となっていました.
私は,「ax」は変数「alpha」へのポインタなので,alphaのアドレスを保持しており,したがって「*ax」は,そのアドレスの内容,すなわち「1.0」であり,「(*func)(*ax)」によって,この「1.0」が実引数としてquadの仮引数「alph」に渡ると思ったのですが(実際quadへ飛んでいく直前では,*axは1.0になっていましたが),そうは行かなかったようなのです.
長い質問文で失礼しますが,よろしくお願いいたします.