関数名をパラメータで渡す

関数のパラメータとして関数名を渡して、渡された関数を実行します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. ソースプログラムです。
    ファイル名 説明
    funcpar.cpp 関数名を渡す
  2. 関数のパラメータとして実行したい関数名を渡します。
    まず関数を呼び出す普通のプログラムを見ていただきます。
    add() と sub() と gcm() と lcm() の関数を定義しています。
    int add(int v1, int v2)
    {   return(v1+v2);
    }
    
    int sub(int v1, int v2)
    {   return(v1-v2);
    }
    
    int gcm(int i, int j)
    {   int w1,w2;
    
        w1= i;
        w2= j;
        while(w1!=w2)
        {   if (w1>w2)    w1-= w2;
            else          w2-= w1;
        }
        return(w1);
    };
    
    int lcm(int v1, int v2)
    {   return(v1*v2/gcm(v1,v2));
    }
    
    //★ MAIN
    int main(void)
    {
        printf("12+34= %d\n",add(12,34));
        printf("56-37= %d\n",sub(56,37));
        printf("GCM(24,32)=%d\n",gcm(24,32));
        printf("LCM(24,32)=%d\n",lcm(24,32));
        return 0;
    }
    
  3. 関数名も元を正せば処理ルーチンへのポインタ(アドレス)なので、パラメータとして渡すことができます。
    calc() が関数名をパラメータとして受け取る関数です。
    この関数の Prototype 宣言は次のようになります。
    int calc(int (*)(int, int), int, int);
    関数名をパラメータとして受け取る calc() 関数です。
    int calc(int (*func)(int, int), int i, int j)
    {
        return((*func)(i,j));
    }
    
  4. calc() 関数の呼び出しは次のようになります。
        printf("12+34= %d\n",calc(add,12,34));
        printf("56-37= %d\n",calc(sub,56,37));
        printf("GCM(24,32)=%d\n",calc(gcm,24,32));
        printf("LCM(24,32)=%d\n",calc(lcm,24,32));
    

超初心者のプログラム入門(C/C++)