参考にしたいある関数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になっていましたが),そうは行かなかったようなのです.
長い質問文で失礼しますが,よろしくお願いいたします.
No.1ベストアンサー
- 回答日時:
float (*func)();
の部分を
float (*func)(float);
とすることで期待するように(225に)なりました
早速のご回答ありがとうございました.私も修正後,255になったことを確認できました.
ということは,関数へのポインタの宣言では,「float (*func)(float);」のように引数の型を入れる必要があったのですね.(参考にしていたCの本では,たまたま()のように引数が空欄になっていましたので,そのまま記述してしまっていました.)
おかげさまで助かりました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- C言語・C++・C# キャスト演算について。 1 2023/07/15 15:28
- その他(プログラミング・Web制作) 物理の斜方投射のシミュレーションにおける位置や速度の単位について 4 2023/05/31 09:50
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- C言語・C++・C# C++言語の16進数の表現についておしえてください 1 2022/11/14 17:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
なんかC言語でプログラム書いて...
-
C++でCtrl+Cを無効化したい
-
他のPC上にあるexeを、そのP...
-
ExcelのVBAでX=0〜1の定積分を...
-
実行時エラー429
-
並列計算をしたときのシステム...
-
VB上で実行中の無限ループの止め方
-
Visual Studio デバッグ実行で...
-
sendkeysにてALT+CTRL+INSERTを...
-
MACで動く実行ファイルをWindow...
-
DPマッチングのプログラミング
-
プリントスクリーンをプログラ...
-
C言語で途中までしか、プログラ...
-
プログラミング ソースコード
-
VS-FlexGridについて
-
アクセス[ファイルを開かずに、...
-
popen関数について
-
システム資源とは?
-
clock関数は正確じゃないの?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
なんかC言語でプログラム書いて...
-
プログラミング ソースコード
-
MACで動く実行ファイルをWindow...
-
実行時エラー429
-
Windows10でDOSゲーム
-
VB上で実行中の無限ループの止め方
-
他のPC上にあるexeを、そのP...
-
sendkeysにてALT+CTRL+INSERTを...
-
VBAで外部プログラムを非表示で...
-
システム資源とは?
-
プロセス間通信について
-
アクセス[ファイルを開かずに、...
-
C言語でプログラムを再起動
-
C言語で途中までしか、プログラ...
-
system関数を使用してsuコマン...
-
終了してもプログラムが実行し...
-
PIC のデータEEPROMに書き込み...
-
実行中の実行ファイルの上書き
-
他の実行ファイルを実行するプ...
おすすめ情報