详细说明函数指针
来源:互联网 发布:优学院软件下载 编辑:程序博客网 时间:2024/05/16 05:12
再次说明下,函数指针,是个指针--->它指向函数,既然是指针,那麽先回顾下指针的是怎麽定义的,然后再来说明函数指针,这样比较容易理解一些。
指针的定义,假设需要定义一个指针,我们需要明确一下两点,
(1)需要定义一个什麽类型的指针
(2)指针的名字叫什麽。
假设现在需要这麽一个功能,通过指针打印一个int类型的数据。那麽,首先定义一个int 类型的指针(为什麽是int类型的指针,因为是int类型的数据,假设使用float*,将会出现解析错误),指针名为 p,然后将通过指针p打印,p存放的内容。听起来很彆扭,下面是实际代码:
int * p;
int num ;
p = #
printf("*p = %d",*p);
从上面可以看到,定义一个指针,需要定义它的类型!!!然后是它的名称。
函数指针,函数指针前面已经说了,是个指针。那麽它应该怎麽定义呢?是否跟指针的一样一样的?指针变量的形式;
函数的返回类型(*函数指针名)(参数列表);
是的,就是这样。。。这里可以清楚的看到,函数指针压根就不需要定义是什麽类型的函数指针,而且它这个定义有点像函数!也就是说当看到这麽一个语句 void(*fun)(int,int)的时候,它是一个指针!!!,意思是函数变量名为fun的这麽一个函数指针。大家都知道程序员比较懒,不然也不会现什麽i++ ,++i ,这些东西来搞脑子了。函数指针长成这个样子,程序员当然受不来了,必须书写简单些,于是出现了,typedef void(*fun) (int , int) ,将它定义成一个函数指针类型。。
typedef void(*fun) (int , int) //这句话,就变成了当需要使用这个函数指针类型。
那麽当定义函数指针类型的时候,
fun funtion1; //fun是指针类型,funtion是函数指针名;
到了这裡,我们就可以将funtion1当做普通的指针一样就可以了,只不过这个指针与普通的指针不太一样,这个指针传递的函数地址。
下面是一个函数指针的例子,一个是直接使用int(*funp)(int ,int),另一个是定义函数指针类型,这两个都是实现一样的功能:
#include <stdio.h>
#include <stdlib.h>
typedef int(*funp)(int ,int); //定义一个函数指针,并改名为funp
int add(int a ,int b){
int sum =a+b;
return sum;
}
int callfun1(int(*funp)(int ,int),int i,int j){
int getnum= funp(i,j);
printf("getnum 1= %d",getnum);
}
int callfun2(funp fun ,int i,int j){
int getnum= fun(i,j);
printf("getnum 2= %d",getnum);
}
int main(){
int num1 = 4;
int num2 = 8;
callfun1(add,num1,num2);
callfun2(add,num1,num2);
getchar();
return 0;
}
指针的定义,假设需要定义一个指针,我们需要明确一下两点,
(1)需要定义一个什麽类型的指针
(2)指针的名字叫什麽。
假设现在需要这麽一个功能,通过指针打印一个int类型的数据。那麽,首先定义一个int 类型的指针(为什麽是int类型的指针,因为是int类型的数据,假设使用float*,将会出现解析错误),指针名为 p,然后将通过指针p打印,p存放的内容。听起来很彆扭,下面是实际代码:
int * p;
int num ;
p = #
printf("*p = %d",*p);
从上面可以看到,定义一个指针,需要定义它的类型!!!然后是它的名称。
函数指针,函数指针前面已经说了,是个指针。那麽它应该怎麽定义呢?是否跟指针的一样一样的?指针变量的形式;
函数的返回类型(*函数指针名)(参数列表);
是的,就是这样。。。这里可以清楚的看到,函数指针压根就不需要定义是什麽类型的函数指针,而且它这个定义有点像函数!也就是说当看到这麽一个语句 void(*fun)(int,int)的时候,它是一个指针!!!,意思是函数变量名为fun的这麽一个函数指针。大家都知道程序员比较懒,不然也不会现什麽i++ ,++i ,这些东西来搞脑子了。函数指针长成这个样子,程序员当然受不来了,必须书写简单些,于是出现了,typedef void(*fun) (int , int) ,将它定义成一个函数指针类型。。
typedef void(*fun) (int , int) //这句话,就变成了当需要使用这个函数指针类型。
那麽当定义函数指针类型的时候,
fun funtion1; //fun是指针类型,funtion是函数指针名;
到了这裡,我们就可以将funtion1当做普通的指针一样就可以了,只不过这个指针与普通的指针不太一样,这个指针传递的函数地址。
下面是一个函数指针的例子,一个是直接使用int(*funp)(int ,int),另一个是定义函数指针类型,这两个都是实现一样的功能:
#include <stdio.h>
#include <stdlib.h>
typedef int(*funp)(int ,int); //定义一个函数指针,并改名为funp
int add(int a ,int b){
int sum =a+b;
return sum;
}
int callfun1(int(*funp)(int ,int),int i,int j){
int getnum= funp(i,j);
printf("getnum 1= %d",getnum);
}
int callfun2(funp fun ,int i,int j){
int getnum= fun(i,j);
printf("getnum 2= %d",getnum);
}
int main(){
int num1 = 4;
int num2 = 8;
callfun1(add,num1,num2);
callfun2(add,num1,num2);
getchar();
return 0;
}
0 0
- 详细说明函数指针
- c++ typedef 函数指针详细说明
- c++ typedef 函数指针详细说明
- c++ typedef 函数指针详细说明
- c++ typedef 函数指针详细说明(包含类函数指针)
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- memset函数详细说明
- ioctl函数详细说明
- memset函数详细说明
- ioctl函数详细说明
- 恢复2:
- ORA-01991错误
- MySQL Workbench已停止工作
- 我的面试总结
- ORA-19907: 恢复时间或 SCN 不属于…
- 详细说明函数指针
- ORA-10388: parallel query server…
- 从自动备份中恢复控制文件和SPFILE…
- 降低逻辑读优化SQL(转)
- 单点登录CAS使用记(六):单点登出、单点注销
- Java字符串分割方法split()的功能以及使用方法的详细介绍!
- Kill Session 后寻找该会话的SPID
- 在线购物网站-实验4
- 系统验证与SQLNET.AUTHENTICATION_…