06、函数指针和回调函数(C基础)

先来说一下函数指针的几种使用方式:

第一种,比如我们定义两个相加的函数,定义一个函数指针

语法 返回类型(* 起一个名字)(参数类型,。。。)

int add(int x,int y){
    return x+y;
}
int main(){
    int (*p_func)(int,int) = add;
    int res = p_func(1,2);
    printf("res = %d\n",res);     
    return 0;
}

第二种:

使用typedef定义一种函数指针类型,用它来定义一个指针变量。(这也是在很多C语言框架中北广泛使用的一种方式,在后面的回调函数也是使用这种方式)

int add(int x,int y){
    return x+y;
}
typedef int(*P_FUNC)(int,int);
int main(){
    P_FUNC func= add;
    res  = func(2,6);
    printf("res = %d\n",res);
}

第三种、如果知道一个函数的地址,可以直接使用地址调用函数

ex:我们使用nm命令查到add函数的地址是0000000000401550,就可以直接使用这个地址就行调用函数,比如在嵌入式开发中调用uboot中的的printf函数,就可以这样使用。


    p_func = (int(*)(int,int))0x0000000000401550;
    res = p_func(1,3);
    printf("res = %d\n",res);

第四种、可以直接使用地址来获取返回结果,其实个第三种类似。

    res = ((int(*)(int,int))0x0000000000401550)(5,5);
    printf("res = %d\n",res);

回调函数:

我们可以看到calc函数,需要一个返回值是int参数为int,int类型的函数,我们只需要自己实现这样的一个含函数,吧这个函数地址传进去,就可以进行自己的运算了。

#include <stdio.h>
typedef int(*p_func)(int,int);
int add(int x,int y){
    return x+y;
}
int sub(int x,int y){
    return x-y;
}
//做计算的函数
void calc(p_func func,int x,int y){
    printf("res = %d\n",func(x,y));
}
int main(){
    calc(add,8,4);
    calc(sub,8,4);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值