Cで「関数ポインタ」(および(たとえば)関数にパラメータがある)を作成するにはどうすればよいですか?
1164 次
5 に答える
15
http://www.newty.de/fpt/index.html
typedef int (*MathFunc)(int, int);
int Add (int a, int b) {
printf ("Add %d %d\n", a, b);
return a + b; }
int Subtract (int a, int b) {
printf ("Subtract %d %d\n", a, b);
return a - b; }
int Perform (int a, int b, MathFunc f) {
return f (a, b); }
int main() {
printf ("(10 + 2) - 6 = %d\n",
Perform (Perform(10, 2, Add), 6, Subtract));
return 0; }
于 2009-08-14T16:32:05.360 に答える
5
typedef int (*funcptr)(int a, float b);
funcptr x = some_func;
int a = 3;
float b = 4.3;
x(a, b);
于 2009-08-14T16:34:33.903 に答える
0
最初に関数ポインタを宣言します。
typedef int (*Pfunct)(int x, int y);
関数プロトタイプとほぼ同じです。
しかし、これで作成したのは、一種の関数ポインター(を使用typedef
)だけです。
したがって、次に、そのタイプの関数ポインターを作成します。
Pfunct myFunction;
Pfunct myFunction2;
次に、それらに関数アドレスを割り当てます。これらを関数のように使用できます。
int add(int a, int b){
return a + b;
}
int subtract(int a, int b){
return a - b;
}
. . .
myFunction = add;
myFunction2 = subtract;
. . .
int a = 4;
int b = 6;
printf("%d\n", myFunction(a, myFunction2(b, a)));
関数ポインタはとても楽しいです。
于 2009-08-14T17:44:32.577 に答える
0
関数へのポインターを返す関数を定義することもできます。
int (*f(int x))(double y);
f は、単一の int パラメーターを取り、double パラメーターを取り、int を返す関数へのポインターを返す関数です。
于 2009-08-14T20:11:29.003 に答える
0
このサイトは、関数ポインターに初めて飛び込んだときに役に立ちました。
于 2009-08-14T17:26:35.530 に答える