3

Cで「関数ポインタ」(および(たとえば)関数にパラメータがある)を作成するにはどうすればよいですか?

4

5 に答える 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

このサイトは、関数ポインターに初めて飛び込んだときに役に立ちました。

http://www.newty.de/fpt/index.html

于 2009-08-14T17:26:35.530 に答える