C语言 --- 函数指针(初级)
2015-09-20 18:10
435 查看
1.函数指针:指向函数的指针变量.
函数在内存中也是有地址的,函数名代表函数的内存地址.
例子:函数:int sum(int a,int b);
[b] int sum(int a,int b){[/b]
[b] return a+b;[/b]
[b] }[/b]
[b] 函数名+形参 就是函数[/b]
[b] 函数指针: 函数指针定义:int(*p)(int a,int b);[/b]
[b] 技巧,赋值函数声明[b]int sum(int a,int b),将sum括起来加个*号,将sum改个名字,就定义了一个函数指针,p就是变 量,p = sum;int x = sum(2,3); int x = p(2,3);等价[/b][/b]
[b][b]2. 函数指针剖析[/b][/b]
[b][b] [b]int(p*)(int a,int b) = NULL;[/b][/b][/b]
[b][b] 类型: [b]int(*)(int a,int b) [/b][/b][/b]
[b][b][b] 变量名: p[/b][/b][/b]
[b][b][b] 初值: NULL[/b][/b][/b]
[b][b][b]3. p = sum;[/b][/b][/b]
[b][b][b] p = naxValue;[/b][/b][/b]
[b][b][b] p可以指向任何一个函数;[/b][/b][/b]
[b][b][b]4. typedef int (*PFUN)(int,int);[/b][/b][/b]
[b][b][b] 相当于把[b]int(*)(int a,int b)改成了PFUN;[/b][/b][/b][/b]
[b][b][b] PFUN p = NULL;[/b][/b][/b]
[b][b][b] P = sum;[/b][/b][/b]
[b][b][b] 给函数指针赋值,必须与定义的类型一致.此时p的类型是int[/b][/b][/b]
[b][b][b]5. 回调函数[/b][/b][/b]
[b][b][b] callback[/b][/b][/b]
[b][b][b] 函数回调核心就是把函数作为形参;[/b][/b][/b]
[b][b][b]例子:int maxValue(int x,int y){[/b][/b][/b]
[b][b][b] return a > b ? a : b;[/b][/b][/b]
[b][b][b] }[/b][/b][/b]
[b][b][b] int getValue(int x, int y){[/b][/b][/b]
[b][b][b] return sum(x,y);// 此时getValue是求和;调用时 int a = getValue(2,4);[/b][/b][/b]
[b][b][b] 或者 return maxValue(x,y);[b]// 此时getValue是求最大值;调用时 int a = getValue(2,4);[/b][/b][/b][/b]
[b][b][b][b] 使用哪个就得改getValue函数的内部实现,不灵活,比较麻烦!!!![/b][/b][/b][/b]
[b][b][b] }[/b][/b][/b]
[b][b][b] [b] int getValue(int x, int y,PFUN p){(PFUN p代表返回值是整形的函数指针)[/b][/b][/b][/b]
[b][b][b][b] return p(x, y);[/b][/b][/b][/b]
[b][b][b][b] }[/b][/b][/b][/b]
[b][b][b][b][b] int a = getValue(2,4,maxValue);[/b][/b][/b][/b][/b]
[b][b][b] [b]int b = getValue(2,4,sum);[/b][/b][/b][/b]
[b][b][b][b] 两种的实现,getValue一点都没变,只是传参数的值.还可以添加其它函数,p随意指,很方便.[/b][/b][/b][/b]
[b][b][b] 比如迅雷公司,此时getValue是核心的代码,是知识产权,不会让程序员修改,升级时只是添加函数,然后主函数调用就可 以了[/b][/b][/b]
[b][/b]
函数在内存中也是有地址的,函数名代表函数的内存地址.
例子:函数:int sum(int a,int b);
[b] int sum(int a,int b){[/b]
[b] return a+b;[/b]
[b] }[/b]
[b] 函数名+形参 就是函数[/b]
[b] 函数指针: 函数指针定义:int(*p)(int a,int b);[/b]
[b] 技巧,赋值函数声明[b]int sum(int a,int b),将sum括起来加个*号,将sum改个名字,就定义了一个函数指针,p就是变 量,p = sum;int x = sum(2,3); int x = p(2,3);等价[/b][/b]
[b][b]2. 函数指针剖析[/b][/b]
[b][b] [b]int(p*)(int a,int b) = NULL;[/b][/b][/b]
[b][b] 类型: [b]int(*)(int a,int b) [/b][/b][/b]
[b][b][b] 变量名: p[/b][/b][/b]
[b][b][b] 初值: NULL[/b][/b][/b]
[b][b][b]3. p = sum;[/b][/b][/b]
[b][b][b] p = naxValue;[/b][/b][/b]
[b][b][b] p可以指向任何一个函数;[/b][/b][/b]
[b][b][b]4. typedef int (*PFUN)(int,int);[/b][/b][/b]
[b][b][b] 相当于把[b]int(*)(int a,int b)改成了PFUN;[/b][/b][/b][/b]
[b][b][b] PFUN p = NULL;[/b][/b][/b]
[b][b][b] P = sum;[/b][/b][/b]
[b][b][b] 给函数指针赋值,必须与定义的类型一致.此时p的类型是int[/b][/b][/b]
[b][b][b]5. 回调函数[/b][/b][/b]
[b][b][b] callback[/b][/b][/b]
[b][b][b] 函数回调核心就是把函数作为形参;[/b][/b][/b]
[b][b][b]例子:int maxValue(int x,int y){[/b][/b][/b]
[b][b][b] return a > b ? a : b;[/b][/b][/b]
[b][b][b] }[/b][/b][/b]
[b][b][b] int getValue(int x, int y){[/b][/b][/b]
[b][b][b] return sum(x,y);// 此时getValue是求和;调用时 int a = getValue(2,4);[/b][/b][/b]
[b][b][b] 或者 return maxValue(x,y);[b]// 此时getValue是求最大值;调用时 int a = getValue(2,4);[/b][/b][/b][/b]
[b][b][b][b] 使用哪个就得改getValue函数的内部实现,不灵活,比较麻烦!!!![/b][/b][/b][/b]
[b][b][b] }[/b][/b][/b]
[b][b][b] [b] int getValue(int x, int y,PFUN p){(PFUN p代表返回值是整形的函数指针)[/b][/b][/b][/b]
[b][b][b][b] return p(x, y);[/b][/b][/b][/b]
[b][b][b][b] }[/b][/b][/b][/b]
[b][b][b][b][b] int a = getValue(2,4,maxValue);[/b][/b][/b][/b][/b]
[b][b][b] [b]int b = getValue(2,4,sum);[/b][/b][/b][/b]
[b][b][b][b] 两种的实现,getValue一点都没变,只是传参数的值.还可以添加其它函数,p随意指,很方便.[/b][/b][/b][/b]
[b][b][b] 比如迅雷公司,此时getValue是核心的代码,是知识产权,不会让程序员修改,升级时只是添加函数,然后主函数调用就可 以了[/b][/b][/b]
[b][/b]
相关文章推荐
- C语言实现单链表-04版
- C++中CString,int,string,char*之间的转换
- Eclipse环境下通过C语言连接MySQL数据库方法
- c++实现两个元素进栈和出栈的顺序
- C++拷贝构造函数详解
- c++地址问题
- C++虚继承的概念
- C/C++堆和栈的区别
- 项目19.2 能够对齐的数据
- 黑马程序员--C语言学习笔记之运算符
- C文件API函数
- C++中接口与抽象类
- 3Sum, 3Sum Closest, 4 Sum
- C深入笔记
- c++11 Thread库初探
- 项目19.1 字符及其编码
- Visual Studio C++ include与library
- 快速幂(C语言实现) 超详细 (转载)
- 应聘C语言知识点复习 二
- 模板函数 c++