typedef函数指针

用途:

函数指针通常用来实现回调,也可以用来对模块调用以函数表的形式进行优化。

使用方法:

1、定义函数指针类型

使用typedef更直观更方便

// 定义一个原型为int Fun( int a );的函数指针

typedef int (*PTRFUN) ( int aPara );

typedef的功能是定义新的类型。这里定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。

2、函数指针变量的定义

PTRFUN pFun; // pFun 为函数指针变量名

int (*pFun2) ( int a ); // pFun2也是函数指针变量名

3、函数指针作为函数的参数传递

// 定义回调函数

int CallBack( int a )

{

return ++a;

}
// 定义回调者函数

void Caller( PTRFUN cb )

// void Caller( int (*cb) ( int ) ) // 也可这样申明

{

int nPara = 1;

int nRet = cb( nPara );

}
// 使用回调

void Test()

{

Caller( CallBack ); // 直接使用回调函数

PTRFUN cb = CallBack; // int (*cb) ( int ); cb = CallBack;

int nRet1 = cb( 99 ); // nRet1 = 100;

}

4、函数指针的指针使用

// 定义函数指针的指针

typedef int (**PTRPTRFUN) ( int aPara );

// 函数指针的指针作为参数

void PtrCaller( PTRPTRFUN cb )

// void PtrCaller( PTRFUN* cb ) // 指针申明

// void PtrCaller( int (**cb) ( int ) ) // 原型申明

{

int nRet = (*cb)(999); // nRet = 1000;

}
// 使用函数指针的指针

void Test()

{

PTRFUN cb = CallBack;

PtrCaller( &cb );

}

5、函数指针数组的使用

// 函数指针数组的定义

PTRFUN fArray[10];

// int (*fArray[10]) ( int ); // 原型定义

for ( int i = 0; i < 10; i++ )

{

fArray[i] = CallBack;

int nRet = fArray[i](i); // nRet = i+1;

}

使用实例:

这里给出一个使用函数指针的简单例子:

//------------------------------------------------------

#include

 

typedef int (*PTRFUN) ( int aPara , int bPara);

 

int func1(int Pa, int Pb);

int func2(int Pa, int Pb);

int func3(int Pa, int Pb);

int func4(int Pa, int Pb);

 

void main()

{

int i = 0;

int j = 0;

PTRFUN pFuncArray[4] = {func1, func2, func3, func4};

PTRFUN pFunc;

 

for(i = 3; i >= 0; i --)

{

pFunc = pFuncArray[i];

printf("Output is: %d \n", (*pFunc)(i,i));

}

}

 

int func1(int Pa, int Pb)

{

printf("func1 with input para %d, %d \n", Pa, Pb);

return Pa + Pb;

}

 

int func2(int Pa, int Pb)

{

printf("func2 with input para %d, %d \n", Pa, Pb);

return Pa - Pb;

}

 

int func3(int Pa, int Pb)

{

printf("func3 with input para %d, %d \n", Pa, Pb);

return Pa * Pb;

}

 

int func4(int Pa, int Pb)

{

printf("func4 with input para %d, %d \n", Pa, Pb);

return (Pb == 0)? 0xffff : (Pa / Pb);

}

输出为:

func4 with input para 3, 3

Output is: 1

func3 with input para 2, 2

Output is: 4

func2 with input para 1, 1

Output is: 0

func1 with input para 0, 0

Output is: 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值