您的位置:首页 > 编程语言 > C语言/C++

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: