首页 > 其他分享 >C温故补缺(七):函数指针与回调函数

C温故补缺(七):函数指针与回调函数

时间:2022-11-11 22:47:39浏览次数:36  
标签:函数 int max 补缺 函数指针 回调 温故 funp

函数指针与回调函数

函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同

如:

#include<stdio.h>
int max(int x,int y){
    return x>y?x:y;
}

int main(){
    int (*funp)(int,int);
    funp=max;
    printf("%d ",funp(2,8));
}

指向一个确定的函数后,就可以通过指针调用函数,在实际执行中还是max函数栈,并不是funp函数栈

作用1: 统一参数相同功能大致不同的函数,降低耦合度,不必放在多个文件中,在一定程度上体现了多态性

如:

#include<stdio.h>
int max(int x,int y){
    return x>y?x:y;
}

int min(int x,int y){
    return x<y?x:y;
}

int main(){
    int (*funp)(int,int);
    funp=max;
    printf("max=%d ",funp(2,8));
    funp=min;
    printf("min=%d ",funp(2,8));
}

作用2 :作为回调函数

回调函数:当一个函数指针作为另一个函数的参数时,这个指针指向的函数就叫回调函数

#include<stdio.h>
int sayHello(){
    printf("Hello ");
}

void init(int (*funp)()){
    funp();
}

int main(){
    init(sayHello);
    printf("\n");
}

在功能上,回调函数和普通调用函数没差,回调函数存在的意义就在于其作为参数可变.在项目开发过程中,函数库和主程序一般时分开的,当库函数中的函数不能满足需求时,如果不想改库函数源码,就可以重新写新的库函数,调用时只需传入新的回调函数即可.

其实回调函数是一种破坏系统结构的设计思路,只是迫不得已的修改,一旦文件中出现多回调函数,那么说明之前的函数库设计不合理,需要重新构建函数库

更多的,函数指针还是用于多态,如c 标准库stdlib中的快速排序函数qsort会要求一个与strcmp类似的参数,用于设置数据比较的方法

标签:函数,int,max,补缺,函数指针,回调,温故,funp
From: https://www.cnblogs.com/Tenerome/p/Creview7.html

相关文章

  • C温故补缺(六):C反汇编常用的AT&Tx86语法
    C语言反汇编用到的AT&Tx86汇编语法参考:CSDN1,CSDN2默认gcc-S汇编出的,以及反汇编出的,都是AT&Tx86代码,可以用-masm=intel指定为intelx86汇编格式gcc-Stest.c-m......
  • C温故补缺(五):main函数的参数
    main()的参数main()函数的参数,用于在外部执行时传入参数,类似windows的bat脚本或linux的sh脚本.在bat脚本中传入参数,用%接收.sh脚本的参数用$接收.c语言编译成可执行文......
  • 温故而知新——Java双列集合Map&Stream流
    总体目录:01-双列集合的特点02-Map集合常用的APIMap是顶层接口,常用方法如下:size()、isEmpty()、clear()方法容易理解;put()方法的细节:如果第一次添加元素,返回值为null......
  • C温故补缺(四):GDB
    gdbgdb是由GNU软件社区提供的CDebug工具Pre在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式gcctest.c-g-otest用gdbtest来调试程序,用quit退出调试......
  • .net 温故知新:【9】.NET日志记录 ILogger使用和原理
    日志日志作为我们程序记录的“黑匣子”不论什么系统都应该使用到的,比如我们经常使用的log4net就是第三方日志记录提供程序。.NET支持使用各种内置和第三方日志记录提供程......
  • 拓端数据tecdat|R语言代写:用R语言填补缺失的数据
    缺少数据在分析数据集时可能不是一个微不足道的问题。如果缺失数据的量相对于数据集的大小非常小,那么为了不偏离分析而忽略缺少特征的少数样本可能是最好的策略,但是留下可用......
  • C温故补缺(三):存储类声明符(auto,register,extern,static)
    auto,register,extern,static四个存储类声明符,用于定义变量/函数的作用域和声明周期①auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型被auto修饰的......
  • C温故补缺(二):volatile
    volatile参考:CSDNvolatile也是一个类型修饰符,被其修饰的变量意味着可以被某些编译器未知的因素修改,如操作系统,硬件,线程等.当遇到volatile修饰的变量时,编译器对访......
  • C语言函数指针示例
      1#include<stdio.h>23doubleadd(doublea,doubleb)4{5returna+b;6}78doublesub(doublea,doubleb)9{10returna-......
  • C温故补缺(一):数据类型和基本类型占位
    数据类型基本类型:就是算术类型,包括整型和实型枚举类型:一组离散的整数void类型:无可用值类型派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun())......