回答ありがとうございます。一回、自分で「関数ポインタ」でサイト検索してみて、勉強してみました。
そして、勉強用に簡単なプログラムを作ってみました。
コード:
#include <stdio.h>
#define SUCCESS 0
#define FAIL -1
int wa(int a,int b){
return ( a+b );
}
int sa(int a,int b){
return ( a-b );
}
int seki(int a,int b){
return ( a*b );
}
int syou(int a,int b){
return ( a/b );
}
int amari(int a,int b){
return ( a%b );
}
int main(){
int a,b,select;
int(*func[])(int,int)={
wa,
sa,
seki,
syou,
amari,
};
printf("a>>");
scanf("%d",&a);
printf("b>>");
scanf("%d",&b);
printf("aとbの何を求めますか?\n");
printf("1:和 2:差 3:積 4:商 5:余\n>>");
scanf("%d",&select);
if( select>5 || select<1 ){
printf("ERROR!!\n");
return FAIL;
}
else printf("\n%d\n",func[select-1](a,b));
return SUCCESS;
}
(int,int)を(int)や(double,double)に変更したところ、
error C2440: '初期化中' : 'int (__cdecl *)(int,int)' から 'int (__cdecl *)(int)' に変換できません。
というエラーが発生しました。
また、上記5つの関数のうち、適当な1つの関数の戻り値をdoubleに変えてみたところ、同じようなエラーが表示されました。
このことから、関数ポインタの配列は引数および戻り値が同じものにしか適用できない、ということがわかりました。
オフトピック
自分で公式みたいにしてみました。
戻り値の型(*関数ポインタ配列名[最大要素数])(引数の型)
これであってますか?