1. ホーム
  2. c

[解決済み】C言語の関数ポインタはどのように機能するのですか?

2022-03-18 10:20:24

質問

最近、C言語で関数ポインタを使用した経験があります。

そこで、自分自身の質問に答えるという伝統に従って、このテーマを手っ取り早く知りたい人のために、非常に基本的なことを少しまとめてみることにしました。

どのように解決するのですか?

C言語における関数ポインタ

まず、基本的な関数から始めましょう。 を指します。 :

int addInt(int n, int m) {
    return n+m;
}

まず最初に、2 を受け取る関数へのポインタを定義します。 int を返し int :

int (*functionPtr)(int,int);

これで、安全に関数を指定できるようになりました。

functionPtr = &addInt;

さて、関数へのポインタができたので、それを使ってみましょう。

int sum = (*functionPtr)(2, 3); // sum == 5

別の関数にポインタを渡すのも基本的には同じです。

int add2to3(int (*functionPtr)(int, int)) {
    return (*functionPtr)(2, 3);
}

関数ポインタを戻り値で使うこともできます(頑張れ、面倒になる)。

// this is a function called functionFactory which receives parameter n
// and returns a pointer to another function which receives two ints
// and it returns another int
int (*functionFactory(int n))(int, int) {
    printf("Got parameter %d", n);
    int (*functionPtr)(int,int) = &addInt;
    return functionPtr;
}

しかし、このような場合は typedef :

typedef int (*myFuncDef)(int, int);
// note that the typedef name is indeed myFuncDef

myFuncDef functionFactory(int n) {
    printf("Got parameter %d", n);
    myFuncDef functionPtr = &addInt;
    return functionPtr;
}