标签:
1.函数指针:指向函数的指针变量.
函数在内存中也是有地址的,函数名代表函数的内存地址.
例子:函数:int sum(int a,int b);
int sum(int a,int b){
return a+b;
}
函数名+形参 就是函数
函数指针: 函数指针定义:int(*p)(int a,int b);
技巧,赋值函数声明int sum(int a,int b),将sum括起来加个*号,将sum改个名字,就定义了一个函数指针,p就是变 量,p = sum;int x = sum(2,3); int x = p(2,3);等价
2. 函数指针剖析
int(p*)(int a,int b) = NULL;
类型: int(*)(int a,int b)
变量名: p
初值: NULL
3. p = sum;
p = naxValue;
p可以指向任何一个函数;
4. typedef int (*PFUN)(int,int);
相当于把int(*)(int a,int b)改成了PFUN;
PFUN p = NULL;
P = sum;
给函数指针赋值,必须与定义的类型一致.此时p的类型是int
5. 回调函数
callback
函数回调核心就是把函数作为形参;
例子:int maxValue(int x,int y){
return a > b ? a : b;
}
int getValue(int x, int y){
return sum(x,y);// 此时getValue是求和;调用时 int a = getValue(2,4);
或者 return maxValue(x,y);// 此时getValue是求最大值;调用时 int a = getValue(2,4);
使用哪个就得改getValue函数的内部实现,不灵活,比较麻烦!!!!
}
int getValue(int x, int y,PFUN p){(PFUN p代表返回值是整形的函数指针)
return p(x, y);
}
int a = getValue(2,4,maxValue);
int b = getValue(2,4,sum);
两种的实现,getValue一点都没变,只是传参数的值.还可以添加其它函数,p随意指,很方便.
比如迅雷公司,此时getValue是核心的代码,是知识产权,不会让程序员修改,升级时只是添加函数,然后主函数调用就可 以了
标签:
原文地址:http://www.cnblogs.com/blogofgsl/p/4822571.html