こんばんは、プログラミングで困っています。
初心者です。
アドバイスおねがいします。
関数の引数として別の関数の名前をわたしたとき、引数をうけとる関数はどのように記述すればよいのでしょうか。
プログラム全体の動作は簡単で、メイン関数内の配列xに格納された値にそれぞれ10を足して出力させます。
メイン関数で関数funcを呼び出す際、引数として関数plusの名前をわたします。
※メイン関数はこのままで、関数plusとfuncだけを改善したいです。
関数のポインタについて調べていたのですが、よくわからなかったので質問させていただきます。
下は、自分なりに作ったプログラムです。
特に「*****」の部分をどう記述すればよいのか、解説をいただけるとうれしいです。
宜しくお願いします。
関数に関数名を渡す際の記述の仕方について教えてください。
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
qsortの書き方を参考にするといいかもしれません。
http://9cguide.appspot.com/r_lib.html#S2
http://9cguide.appspot.com/r_lib.html#S2
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
>>みけCATさん
返信ありがとうございます。
int(*compar)(const void *x, const void *y)
のところですよね。
ありがとうございます、少し考えてきます!
返信ありがとうございます。
int(*compar)(const void *x, const void *y)
のところですよね。
ありがとうございます、少し考えてきます!
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
みけCATさんのアドバイスを参考にもう一度考えなおしたところ、
次のようなプログラムを作成することができました。
実行は成功しました、ありがとうございます(><)
改善できる点がありましたら、引き続きアドバイスをいただけるとうれしいです。
宜しくお願いします。
次のようなプログラムを作成することができました。
実行は成功しました、ありがとうございます(><)
#include <stdio.h>
int plus(int);
void func(int *,int,char *);
int main(void)
{
int i;
int x[5]={0,1,2,3,4};
func(x,5,plus);
for(i=0; i<5; i++){
printf("x[%d]=%d\n",i,x[i]);
}
return 0;
}
int plus(int a)
{
return a+10;
}
void func(int *a,int b,char *c)
{
int (*p)(int)=c;
int i;
for(i=0; i<b; i++){
*a=p(*a);
a++;
}
}
宜しくお願いします。
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
なぜわざわざ関数の引数をchar*型にしたのですか?
普通に関数ポインタを引数にすればいいと思います。
普通に関数ポインタを引数にすればいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
char*に暗黙のキャストをするよりも
関数ポイントとして引数を定義したほうが明示的でわかりやすいと思います。
関数ポイントとして引数を定義したほうが明示的でわかりやすいと思います。
int plus(int);
void func(int *,int,int (*p)(int a));
int main(void)
{
int i;
int x[5]={0,1,2,3,4};
func(x,5,&plus);
for(i=0; i<5; i++){
printf("x[%d]=%d\n",i,x[i]);
}
return 0;
}
int plus(int a)
{
return a+10;
}
void func(int *a,int b,int (*p)(int a))
{
int i;
for(i=0; i<b; i++){
*a=p(*a);
a++;
}
}
Re: 関数に関数名を渡す際の記述の仕方について教えてください。
>>みけCATさん
返信ありがとうございます。
言われてみるとそうですね(><)
ご指摘ありがとうございます!
>>涼雅さん
返信ありがとうございます。
なるほどです!
解説してくださってありがとうございます(><)
解決しました!お二方ともありがとうございました!
返信ありがとうございます。
言われてみるとそうですね(><)
ご指摘ありがとうございます!
>>涼雅さん
返信ありがとうございます。
なるほどです!
解説してくださってありがとうございます(><)
解決しました!お二方ともありがとうございました!