C语言函数指针之回调函数
来源:互联网 发布:mac导出iphone照片 编辑:程序博客网 时间:2024/05/20 14:17
1、为什么需要函数指针
见下面的回调函数的使用,由于本人才疏学浅,不想误导大家,大家可以参考其它的资料,望谅解。
2、什么是函数指针
首先它是一个指针变量,变量的类型是函数的指针,也就是函数的地址,也就是说函数指针是一个用来保存函数地址的变量,因为它只是一个指针变量,只不过这个指针变量保存的不是普通的数据类型变量的地址,而是函数的地址
在C语言中,函数名就是函数的入口地址
3、函数指针的定义
int (* fp)(int , int y);
fp
是函数指针的变量 int (*)(int, int)
是这个指针变量的数据类型
要注意(*p)
是不可以省略的,不然就定义了一个指针函数,注意这两个概念的区别,一个是保存函数地址的指针变量,一个是含有指针类型的函数,区别还是蛮大的。
3.1函数指针的特性
- 参数的个数必须要和返回值类型的函数的原型一致
- 形参的数据类型也要一致
- 返回值类型也必须一样
形如:在定义函数指针的时候后面的形参也可以和函数声明一样,不用写具体的形参变量
int (*PonterFunc)(int, int);int sum(int x, int y) { return x + y;}
4、函数指针的用途–回调函数
关于回调函数,为什么要使用回调函数,由于我个人实在是太业余了,怕误导大家,所以就简单说一下
仔细观察下面的代码会发现一个共同点,
1.1.他们都有一个共同的返回值类型int
2.2.都是两个参数,并且两个参数的类型相同
假如现在客户有一个需要,需要的是两个结果的和,但是这一段时间后,他又需要获得这两个数中的最大值或者是最小值(当然实际应用中,肯定不会有这么二的需求),这个时候你是选择修改源代码还是,修改源代码肯定是不合适的,所以这个时候函数指针就上场了,你可以先把客户可能的需要先提前作好判断,如下
int sum(int x, int y){ return x + y;}int max(int x, int y){ return x + y;}int getMaxValue(int x, int y){return x>y ? x : y}... ...
typedef int (* PFUN)(int, int);int sum(int x, int y){ return x + y;}int minus(int x, int y){ return x + y;}int getMaxValue(int x, int y){return x>y ? x : y}... ...int getValue(int x, int y, PFUN p){ return p(x, y);}int a, b, c, x, y;a = b = c = x = y = 0;printf("sum: %d\n", getValue(100, 200, sum));printf("sum: %d\n", getValue(100, 200, minus));printf("sum: %d\n", getValue(100, 200, getMaxValue));
5、函数指针的用途,回调函数参考示例
#include <stdio.h>int sum(int x, int y);int getMaxVal(int x, int );int getMinus(int x, int y);typedef int(* PFUN)(int x, int y);int getValue(int, int, PFUN);int sum(int x, int y){ return x + y;}int getMaxVal(int x, int y){ return x>y ? x : y;}int getMinus(int x, int y){ return x - y;}//Define a call functionint getValue(int x, int y, PFUN p){ return p(x, y);}int main(void){ int x, y; //Define a pointer variable, The return type is same as the sum function, NOT int. //The pf is the pointer function variable //int (*)(int x, int y) is the return type. int (* pf)(int x, int y); //pf = sum; PFUN p = sum; x = 100; y = 200; printf("The sum result is: %d\n", sum(x, y)); //printf("The sum result is: %d\n", pf(x, y)); printf("The sum result is: %d\n", p(x, y)); //Test the call back function printf("The call back function test result: sum\t\t -->\t%d\n", getValue(300, 200, sum)); printf("The call back function test result: getMinus\t -->\t%d\n", getValue(300, 200, getMinus)); printf("The call back function test result: getMaxVal\t -->\t%d\n", getValue(300, 200, getMaxVal)); return 0;}
0 0
- C语言函数指针之回调函数
- 【C语言】二级指针,函数指针,回调函数
- C语言中的回调函数(函数指针)
- 函数指针中的回调函数(C语言版本)
- C语言回调函数与函数指针
- c语言-函数指针和回调函数
- C语言--函数指针和回调函数
- C语言函数指针与回调函数
- 【C语言】函数指针与回调函数
- 爬爬爬之路:C语言(十一) 函数指针(回调函数)
- C语言之最好理解的通过函数指针作为参数实现回调函数
- C语言中的指针之回调函数
- C/C++之回调函数---函数指针的作用
- C函数指针应用之回调函数
- C/C++之回调函数---函数指针的作用
- C/C++之回调函数---函数指针的作用
- C 函数指针 回调函数
- C 函数指针与回调函数
- IP地址和MAC地址的异同
- C语言中main函数的参数
- js双击插入nextsibling
- Java学习环境搭建 IntelliJ Idea快捷键大全
- python数据结构学习笔记-2016-10-22-01-评价python列表
- C语言函数指针之回调函数
- 数组的定义
- 易错的指针问题
- lua笔记1
- SPOJ GSS 1~8
- NSString 各种类型的判断
- TCP/IP详解学习笔记(7)-广播和多播,IGMP协议
- do-while循环
- 正则表达式学习