#/*-------------------回調函數--------------------------*/
#include <stdio.h>
#include <stdlib.h>
typedef struct __OP{ //初始化函數指針
float (*P_ADD)(float ,float);
float (*P_SUB)(float ,float);
float (*P_MUT)(float ,float);
float (*P_DIV)(float ,float);
}OP;
float ADD(float a ,float b ){ //加法
return a+b;
}
float SUB(float a ,float b ){ //減法
return a-b;
}
float MUT(float a ,float b ){ //乘法
return a*b;
}
float DIV(float a ,float b ){ //除法
return a/b;
}
void
op_init(OP *op) // 函數指針 指向函數的位址
{
op->P_ADD = ADD;
op->P_SUB = SUB;
op->P_MUT = MUT;
op->P_DIV = DIV;
}
float
ADD_SUB_MUT_DIV(float a ,float b ,float (*io_fuc)(float ,float)) //函數回調
{
return (*io_fuc)(a,b);
}
int main(){
OP *op = (OP*)malloc(sizeof(OP));
op_init(op);
//輸出函數指針的運算
printf("ADD = %f SUB =%f MUT = %f DIV = %f \n"
,op->P_ADD(1,2)
,op->P_SUB(1,2)
,op->P_MUT(1,2)
, op->P_DIV(1,2));
//輸出回調函數的運算
printf("ADD = %f SUB =%f MUT = %f DIV = %f" ,ADD_SUB_MUT_DIV(1,2,ADD)
,ADD_SUB_MUT_DIV(1,2,SUB)
,ADD_SUB_MUT_DIV(1,2,MUT)
,ADD_SUB_MUT_DIV(1,2,DIV));
}