指针(四)- 函数指针和回调函数

简介: 指针(四)- 函数指针和回调函数

函数指针

函数的二进制代码存放在内存四区中的代码段,函数的地址是它在内存中的起始地址。如果把函数的地址作为参数传递给函数,就可以在函数中灵活的调用其它函数。


       使用函数指针的三个步骤:


       a)声明函数指针;


       b)让函数指针指向函数的地址;


       c)通过函数指针调用函数。

1)声明函数指针

声明普通指针时,必须提供指针的类型。同样,声明函数指针时,也必须提供函数类型,函数的类型是指返回值和参数列表(函数名和形参名不是)


假设函数的原型是:


int func1(int bh,string str);


则函数指针的声明是:


int  (*pfa)(int,string);


pfa是函数指针名,必须用括号,否则就成了返回指针的函数。

2)函数指针的赋值

函数名就是函数的地址。

函数指针的赋值:函数指针名=函数名;

3)函数指针的调用

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

函数指针名(实参);

#include<iostream>
using namespace std;
void func(string str)
{
    cout<<"函数指针示例"<<endl;
}
int main(){
    string message = "调用函数指针的信息";
    func(message);    //普通调用
    void (*func)(string);    //声明函数指针
    pfunc = func;            //对函数指针赋值,语法是函数指针名 = 函数名。
    pfunc(message);          //用函数指针名调用函数。C++
    (*pfunc)(message);       //用函数指针名调用函数。C语言。
}

回调函数是把一个函数的代码嵌入到另外一个函数中,调用函数提供了·主体的流程和框架,具体功能由回调函数来完成。在写调用函数时,只要确定回调函数的种类,不关心回调函数的功能。

如何让给回调函数传参

       由调用函数提供实参

       把实参从外面传进去

#include<iostream>
using namespace std;
void print(string str)        //回调函数
{
    cout << "str = " << str << endl;
}
void show(void (*pf)(string), int b)
{
    string str = "hhhhh";    //通过回调函数传参
    pf(str);
}
int main() {
    //show(print);
    show(print, 5);
    return 0;
}
相关文章
|
2月前
|
C++
指针中的回调函数与qsort的深度理解与模拟
本文详细介绍了回调函数的概念及其在计算器简化中的应用,以及C++标准库函数qsort的原理和使用示例,包括冒泡排序的模拟实现。
21 1
|
7月前
指针(5)---回调函数
指针(5)---回调函数
31 0
|
2月前
魔法指针 之 函数指针 回调函数
魔法指针 之 函数指针 回调函数
16 0
|
2月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
20 0
|
7月前
|
编译器 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(下)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
44 0
|
4月前
|
存储 程序员 C语言
指针的高级应用:指针数组、数组指针、函数指针等。
指针的高级应用:指针数组、数组指针、函数指针等。
146 0
|
6月前
|
C语言
指针进阶(回调函数)(C语言)
指针进阶(回调函数)(C语言)
|
6月前
|
存储 C语言 C++
指针进阶(函数指针)(C语言)
指针进阶(函数指针)(C语言)
|
6月前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
71 2
|
7月前
|
算法 搜索推荐 C语言
c函数指针与回调函数
c函数指针与回调函数
48 2