关于函数指针和结构体一起的用法

想到单片机中的中断处理不好多样化,一直通过函数指针传递,今天想通过函数指针实现多样化,在中断中放一个要执行的函数指针,在外面可以改变此指针指向的函数。配合结构体的使用,感受到面向对象中class的存在了。

typedef int (*pFunc)(int);//定义一个函数指针类型

int add(int a) {
    return a + a;
}
int pow(char a) {
    int b= a * a;
    return b;
}

void call(pFunc func,int b) {//函数指针作为参数传递,此时面临函数的参数无法传递的问题,可以另用参数b来传
    cout << func(b) << endl;
}


typedef struct {
    int a;
    char b;
    int (*callA)(int);
    int (*callB)(char);

}Setup;//结构体类型定义


Setup timSetup = {300,200,add,pow};//结构体定义并初始化,将两个前面定义的函数赋给两个函数指针


void callBack(void) {
    cout << timSetup.callA(timSetup.a) << endl;//执行结构体中的函数
    cout << timSetup.callB(timSetup.b) << endl;
}

int main()
{
    callBack();//执行回调函数
}

 

posted on 2024-06-30 22:13  buckm  阅读(3)  评论(0编辑  收藏  举报

导航