函数指针与回调函数

#include<iostream>
using namespace std;
//函数指针就是指向函数的指针

/*
* 用途:
    函数A要作为实际参数传递给函数B,在B中调用,应该就是回调函数。这时候就要用函数指针。

    因为有些功能是流程中的一部分,但是不清楚,需要个性化,只能把公共流程写好,中间穿插个性化内容,
    然后这时候把用函数指针存储个性化功能的地址,然后当成参数传递给总流程函数,在里面调用
*/


// 1、要知道函数的类型:
//    函数类型不看函数名和形参名,看返回值类型和参数列表
//        只要返回值类型一样,形参类型和个数一一对应,那就是一类函数,
//        可以用一个函数指针指。
//
// 2、函数指针的形式:
//        int (*funptr1)(int,string);
//        由于*号优先级较高,且自右向左结合,没有括号的话会先和int结合,这样就不是函数指针了,
//        是返回值为地址的函数。
//        
//        函数指针里面的形参,只要个数和形参类型一样就行,带不带形参变量名 无所谓

//        调用的时候,直接把函数指针名加括号,传上参数就可以了。C语言要在函数指针名字上加(*)
//        fun1ptr(12, "asdasd");


//声明一个打铁流程函数,锻造手法是个性化的东西,没法通用

void duanzao1(void)
{
    cout << "三枚钢" << endl;

}
void duanzao2(void)
{
    cout << "扭转大马士革" << endl;
    

}
void duanzao3(void)
{
    cout << "雨滴大马士革" << endl;

}

void datie(void (*duanzaoptr)(void))
{
    cout << "准备钢材!" << endl;
    cout << "准备锤子!" << endl;
    cout << "开炉烧铁!" << endl;
    //锻造每人各不相同
    duanzaoptr();
    cout << "淬火!" << endl;
    cout << "研磨!" << endl;
    cout << "测试!" << endl;
}

int main(void)
{
    //函数名就是地址,可以作为实参直接传递给  形参是 函数指针的  函数 ,

    datie(duanzao2);

}

 



posted @ 2024-07-09 16:10  墨点Moz  阅读(19)  评论(0)    收藏  举报