コールバック関数の例 - 数学的な計算

書式#include <stdio.hに> 
する#include <malloc.hを> 

/ *********************************** ***** 
 *函数指针结构体
 *************************************** / 
構造体_OPのtypedef 
{ 
    フロート(* p_add)(フロート、フロート)。
    フロート(* p_sub)(フロート、フロート); 
    フロート(* p_mul)(フロート、フロート); 
    フロート(* p_div)(フロート、フロート); 
} OP。

/ **************************************** 
 *加减乘除函数
 **** *********************************** / 
フロートADD(フロートB、フロート)
{ 
    + bを返します; 
} 

フロートSUB(フロートBフロート)
{ 
    返す- B。
} 

フロートMUL(フロートBフロート) 
{
    * bを返します。
} 

フロートDIV(フロートBフロート)
{ 
    / Bを返します。
} 

/ **************************************** 
 *初始化函数指针
 **** *********************************** / 
空隙init_op(OPの*のOP)
{ 
    OP-> p_add = ADD ; 
    OP-> p_sub = SUB; 
    OP-> p_mul =&MUL。
    OP-> p_div =&DIV。
} 

/ **************************************** 
 *库函数
 ***** ********************************** / 
()、フロートB、フロート(* op_funcフロート(フロートadd_sub_mul_divフロート、フロート))
{ 
    リターン(* op_func)(B)
} 

int型のmain(int型ARGC、チャー*のARGV [])
{ 
    OP * OP =(OP *)はmalloc(はsizeof(OP))。 
    init_op(OP); 

    / *直接ポインタコール機能を機能する* / 
    のprintf(「ADD =%F、SUB =%F、MUL =%F、DIV %F = \ N-」、
            (OP-> P_ADD)(1.3、2.2)、 オペアンプ- *> P_sub)(1.3、2.2)、
            (OP-> p_mul)(1.3、2.2)、 オペアンプ- *> p_div )(1.3、2.2)); 

    / *コールバック関数* /呼び出し
    のprintf( "ADD =%F、SUB =%F、MUL =%F、DIV =%F \ N-"、
           add_sub_mul_div(1.3、2.2、ADD)、
           add_sub_mul_div(1.3、2.2、SUB)、
           add_sub_mul_div(1.3、2.2、MUL)、
           add_sub_mul_div(1.3、2.2、DIV)); 

    戻り0; 
}

  

おすすめ

転載: www.cnblogs.com/CodeWorkerLiMing/p/11222261.html