函数指针用于指向一个函数
函数名是函数体的入口地址
<span style="font-size:14px;">//函数指针语法梳理
//1 如何定义一个函数类型
//2 如何定义一个函数指针类型
//3 如何定义一个 函数指针 (指向一个函数的入口地址)
int add(int a, int b)
{
printf("func add ....\n");
return a +b;
}
void main()
{
add(1, 2); //直接调用调用 //函数名就是函数的入口地址
//定义一个函数类型
{
typedef int (MyFuncType)(int a, int b); //定义了一个类型
MyFuncType *myPointerFunc = NULL; //定义了一个指针, 指向某一种类的函数..
myPointerFunc = &add; //细节
myPointerFunc(3, 4); //间接调用
myPointerFunc = add; //细节 //C 过程 兼容历史版本的原因
myPointerFunc(3, 4); //间接调用
}
//定义一个函数指针类型
{
typedef int (*MyPointerFuncType)(int a, int b); //int * a = NULL;
MyPointerFuncType myPonterFunc; //定义一个指针
myPonterFunc = add;
myPonterFunc(5, 6);
}
//函数指针
{
int (*MyPonterFunc)(int a, int b); //定义了一个变量
MyPonterFunc = add;
MyPonterFunc(7, 8);
}
system("pause");
}</span>定义一个函数指针的基本语法格式是:
函数类型 (*指针变量名)(函数形参表)
//此时已经定义了一个指向函数的指针变量,指针变量名为Add
例如: int (*Add)(int a,int b);
但是如果用来做函数参数,或者这个函数参数比较多,这样用来定义函数指针变量,就比较繁琐,比较长。
那有没有办法可以简化一点操作呢,有的,那就是用typedef 关键字,重新定义一个新类型,简化我们的定义
那用typedef,如何定义一个函数指针类型? 其实很简单,就是前面加个typedef
就变成:typedef int (*MyTypeFuncAdd) (int a, int b);//其中MyTypeFuncAdd这里的名字随便你取,只是告诉你以后可以用这个类型//的名字,去定义变量。
不过要注意这里定义的只是新的类型,是类型!类型!类型!而不是定义了变量,定义了一种新的类型,它的类型名字取为MyTypeFuncAdd,但是这种类型比较特殊,它是指向某种函数的指针,这种函数以两个int为参数,并返回int类型。
那么以后我们可以这样定义 函数指针的变量啦!例如:MyTypeFuncAdd my1;
那么怎么使用呢? 只需将我们需要被调用的函数,赋值给my1 就可以,假设我们已经定义一个myAdd函数()
my1 = myAdd;//这里需要注意的是,因为我们现在通过函数指针去调用函数,因此只需要把函数名赋值给my1即可,因为
函数名就代表函数体的入口地址。
#include <iostream>
using namespace std;
int myAdd(int a, int b)
{
cout << "myAdd函数中的加法结果: " << (a+b) << endl;
return a+b;
}
//定义一个函数指针类型,是类型 类似于int*,char* 这样。是类型,还没有具体的变量
//因为使用了typedef,所以定义的只是类型,并不是变量,1意思说
//定义了一种叫 MyTypeFuncAdd的类型,并定义这种类型为 指向某种函数的指针,这种函数以两个int为参数,并返回int类型。
typedef int (*MyTypeFuncAdd)(int a, int b);
//然后我们可以用这种叫MyTypeFuncAdd的类型,定义变量,并且用来做函数的参数
int MainOp(MyTypeFuncAdd myFuncAdd)
{
int c = myFuncAdd(5,6);//间接调用;实参(5,6)调用myFuncAdd所指向的函数==》myAdd函数
return c;
}
int main()
{
MainOp(myAdd);//只需将函数名(函数的入口地址)作为实参传递给 形参myFuncAdd
system("pause");
return 0;
}那么函数指针做函数参数,有什么好处呢? 这样就可以把任务的调用者 如(MainOp(myAdd))
和任务的实现者 分开(解耦合)
那么函数指针类型做了什么工作? 函数指针(回调函数)的本质就是:
提前做了一个协议的约定(把函数的参数,函数返回值提前约定好)
本文深入讲解函数指针的概念、定义及应用,包括基本语法、如何使用typedef简化定义,以及函数指针作为函数参数的应用场景。
4232

被折叠的 条评论
为什么被折叠?



