指向函数的指针

 

一、指向函数的指针的声明

有函数void MyFun(int);

声明void (*FunP)(int);则指针FuP可以指向函数MyFun(),也可以指向具有相同参数以及返回值的函数。

 

二、通过指针调用函数

代码一:

/* 自行包含头文件 */

void MyFun(int x); /* 这个声明也可写成:void MyFun( int )*/

void (*FunP)(int ); /*也可声明成 void(*FunP)(int x),但习惯上一般不这样。 */

int main(int argc, char* argv[])

{

MyFun(10);     /* 这是直接调用 MyFun 函数 */

FunP = &MyFun; /* MyFun 函数的地址赋给 FunP 变量 */

(*FunP)(20);   /* (★)这是通过函数指针变量FunP 来调用MyFun 函数的。 */
return 0;

}  

void MyFun(int x) /* 这里定义一个MyFun 函数 */

{

     printf("%d\n",x);

}

函数 MyFun 好像是一个如 int 的变量(或常量) ,而FunP 则像一个如 int * 一样的指针变量。

代码二:

红色部分改为:

FunP = MyFun; /* MyFun 函数的地址赋给 FunP 变量 */

FunP(20); /* (★)这是通过函数指针变量来调用 MyFun 函数的。*/

运行试试,啊!一样地成功。

咦?

FunP = MyFun;

总结

1.         MyFun 函数名是一个函数指针常量,而 FunP 是一个函数数指针变量。

2.         函数名调用如果都得如(*MyFun)(10)这样,那书写与读起来都是不方便和不习惯的。所以C 语言的设计者们才会设计成又可允许 MyFun(10)这种形式地调用。调用时函数时MyFun();(*MyFun)();FunP();(*FunP)();是一样的。

3.         为统一起见,FunP 函数指针变量也可以 FunP(10)的形式来调用。

4.         赋值时,即可 FunP = &MyFun 形式,也可 FunP = MyFun

转载于:https://www.cnblogs.com/Leon6Dw57/archive/2009/12/04/1617139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值