大家好,我是梁唐。
这是EasyC++系列的第29篇,简单聊聊函数指针。
想要追求更好阅读体验的同学,可以点击「阅读原文」访问github仓库。
函数指针
函数指针顾名思义,就是指向函数的指针。
和数据类似,C++当中函数也有地址,函数的地址是存储函数机器语言代码的内存地址。我们可以将另外一个函数的地址作为参数传入函数,从而实现函数的灵活调用。
获取函数地址
获取函数地址的方法非常简单,只要使用函数名(后面不跟参数和括号)即可。比如我们有一个函数叫做think,那么think()是调用函数拿到结果,而think则是获取函数的地址。
如果我们想要将think函数当做参数传入另外一个函数,我们可以这么写:
- func(think);
声明函数指针
声明函数指针和声明函数类似,我们声明一个函数可以这么写:
- double process(int);
而我们声明函数指针则可以写成这样:
- double (*pt)(int);
如果我们把(*pt)替换成函数名的话,这其实就是一个函数的声明。如果(*pt)是函数的话,那么pt自然就是指向函数的指针了。
函数指针传参
如果我们要实现一个函数,它的一个参数是一个函数指针,它的写法和刚才一样:
- double func(double x, double (*pt)(int));
在这个声明当中,它的第二个参数是一个函数指针。指向的函数接收一个int参数,返回一个double结果。
调用函数
最后, 我们来看下通过指针调用函数的部分。
其实也非常简单,因为我们前面说了(*pt)的效果和函数是一样的,我们之前通过函数名调用函数,那么我们只需要改成通过(*pt)调用即可。
如:
- double process(int);
- double (*pt)(int);
- pt = process;
- cout << (*pt)(5) << endl;
本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。