C语言中的函数指针

Q:函数指针是什么意思?

A:例如一个指针指向int变量,那么这个指针就是保存这个int变量在内存中存储的地址。同理,函数指针就是指向一个函数的指针,那么这个指针就是保存这个函数在内存中存储的起始地址。


* 当我们声明一个数据指针时,必须声明它指向的这个数据的类型。同理在声明一个函数指针时,也必须声明它指向的函数类型。那么我们这里说的函数类型包括哪些?包括函数的返回类型以及函数的参量类型。

比如说我们写的一个函数:void example( int  * ); 

这个函数example( ) 的类型就是:具有int * 类型的参量,返回类型是void的函数。


Q:怎么声明一个函数指针?(我们以上面这个函数类型为例,声明一个指向这种函数类型的函数指针)

A:例如一个数据类型为int的变量,我们声明指向这种类型变量的指针就应该为 int * p;同理,我们声明一个指向“具有int * 类型的参量,返回类型是void的函数”的函数指针就应该是:void (* pf)(int *);

这里的pf就是一个指向“具有int * 类型的参量,返回类型是void的函数”的函数指针。(* pf)就是一个函数。


所以以后如果我们想要声明一个特定类型的函数指针,只需要在某种特定类型的函数,

如:char function(char * ,int); 将这里的函数名function改为(*pf)即可:char (* pf)(char *, int)。


总结:声明一个指向特定函数类型的指针,首先声明一个该类型的函数,然后用(* pf)形式的表达式代替函数名称即可;pf就成为可指向这种类型函数的指针了。。。。。就是这么easy!


因为一个函数名就是这个函数的首地址。所以给一个函数指针赋值就是直接用一个和函数指针指向的相同类型的函数的函数名赋值就好了,例如上面说的函数指针为pf, pf = function;   // 这里的function就是function()

函数的地址。


来看一个例子加深你的理解:

void show( void (*pf)(int *), char * str );

这个函数原型咋一看感觉很难,看完上面我说的就很easy了,那么从上面这个函数原型我们可以得到哪些信息呢?首先就是函数show()的返回类型为void,然后就是这个函数接受两个参量pf和str,参量pf是一个函数指针,参量str是一个数据指针。更具体一点就是:pf指向接受一个int * 类型参量且返回类型为void的函数,str指向一个char型的值。函数就可以这样调用:show( example,a );  // a为指向char型的指针;


So easy!!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值