C++学习笔记:函数指针和回调函数

目录

前言

一、函数指针

1.什么是函数指针

2.使用函数指针的3个步骤

(1)声明函数指针

(2)让函数指针指向函数的地址(函数指针的赋值)

(3)通过函数指针调用函数

二、回调函数

1.什么是回调函数

2.使用回调函数的意义

三、代码示例

总结


前言

临近秋招,正在准备海投智驾开发的相关岗位。智驾岗位普遍要求能够熟练使用C++,因此决定对C++的知识点进行一次系统的回顾和复习,满足岗位的面试和工作需求。

新开一个专栏,将复习过程中遇到的重要知识点记录下来,做个备忘,方便回顾。

函数指针和回调函数在多线程和网络通讯中很常用。在机器人和自动驾驶开发中,回调函数也常用于将具体功能嵌入到调用者函数的流程和框架中。


一、函数指针

1.什么是函数指针

函数指针是指向函数地址的指针

2.使用函数指针的3个步骤

(1)声明函数指针

声明函数指针时,必须提供函数的类型(函数的返回值和参数列表),函数指针的声明要与函数的类型一致。

例如,有下面三个函数:

int func1(int a,string str);

bool func2(int b,string msg);

bool func5(int c);

它们各自的函数指针的声明为:

int (*pfa)(int,string);

bool (*pfb)(int,string);

bool (*pfc)(int);

注意:pfa、pfb、pfc是函数指针名,必须用括号将*和函数名括起来,否则就成了返回值为指针的函数。

(2)让函数指针指向函数的地址(函数指针的赋值)

在C++中,函数名就是函数的地址。对函数指针进行下面的赋值操作,即可让函数指针指向函数的地址。

函数指针的赋值方法:

函数指针名=函数名;

具体的代码为:

pfunc = call_back_func;

(3)通过函数指针调用函数

通过函数指针调用函数的方法:

(*函数指针名)(实参)

代码为:

pfunc(no,message);

二、回调函数

1.什么是回调函数

使用函数指针,可以实现将函数的地址作为参数传递给其他函数,称为“函数的回调”

在函数的回调这个过程中,其地址(函数名)被作为参数传递的函数,就是回调函数

2.使用回调函数的意义

函数指针和回调函数本身的定义和使用方法都不难,对于初学者来说,难点在于不清楚回调函数的使用场景,或者说为什么要使用回调函数。

稍微了解C++肯定知道,我们可以直接在其他函数中通过“函数名(实参)”的方式来调用函数。既然如此,为什么还要大费周章地声明回调函数和函数指针来对函数进行调用呢?

针对这个问题,我是这样理解的:

通过“函数名(实参)”的方式调用函数时,必须要清楚函数的名称和具体实现的功能。但在实际的开发过程中,在编写调用者函数时,很可能不清楚需要嵌入的回调函数的名称和具体功能,只大概了解回调函数的类型。

针对这种情况,可以在声明调用者函数时设置指针类型的形参,并将回调函数的地址作为实参传入调用者函数,从而达到将回调函数作为一个参数传递给调用者函数的效果,实现了回调函数的灵活调用。

三、代码示例

对函数指针和回调函数的用法操作进行举例,便于理解。 

基于上述函数指针和回调函数的知识,简单定义一个回调函数call_back_func,将其嵌入调用者函数func,并在main函数中运行。

在这段代码中,声明调用者函数时,以形参的形式声明了函数指针,并在main函数中运行调用者函数,将函数指针赋值为call_back_func。

#include 
using namespace std;

void call_back_func(int a);           // 声明回调函数
{
  cout << "a=" << a << endl;          // 定义回调函数的具体功能
}

void func(void(*pfunc)(int),int b)    // 声明调用者函数,该函数的形参中包含函数指针的声明
{
  pfunc(b);                           // 用函数指针名调用回调函数,并传入实参b
}


void main()
{
  number = 3;
  func(call_back_func, number);       // 运行调用者函数,并对形参中的函数指针赋值
}

总结

本文是针对C++“函数指针与回调函数”知识点的复习笔记,简单记录了函数指针和回调函数的定义和使用方法。

你可能感兴趣的:(C++学习笔记,c++,笔记,面试)