函数指针数组的妙用

问题原型:

switch( nStreamType )
    {
       case 0:
           function1();   //或者function1( int )
           break;
       case 1:
       ......
       case 255:
           function255();  //或者function1( int )
           break;
     }

这样写的代码,相当长,而且让人看着不舒服。。

想到用函数指针数组来加以改善。

函数名实际上也是一种指针,指向函数的入口地址,但它又不同于普通的如int*、double*指针,看下面的例子来理解函数指针的概念:
int funtion( int x, int y );
void main ( void )
{
    int (*fun) ( int x, int y );
    int a = 10, b = 20;
    function( a, b );
    fun = function;
    (*fun)( a, b );
     ……
}
  语句1定义了一个函数function,其输入为两个整型数,返回也为一个整型数(输入参数和返回值可为其它任何数据类型);语句3定义了一个函数指针,与int*或double*定义指针不同的是,函数指针的定义必须同时指出输入参数,表明这是一个函数指针,并且*fun也必须用一对括号括起来;语句6将函数指针赋值为funtion,前提条件是*fun和function的输入参数和返回值必须保持一致。语句5直接调用函数function(),语句7是调用函数指针,二者等效。

首先定义256个处理函数(及其实现)。

int funtion0( int );
……..
int funtion255( int );

其次定义函数指针数组,并给数组赋值。
int (*fun[256])(int );

fun[0] = function0;
…….
fun[255] = function();

 

调用的时候:

for (int i(0);i<4;++i)
 {
  cout<<"函数返回值"<<(*fun[i])(i)<<endl;    //没有参数的调用,就这么写 (*fun[i])()  或者 *fun[i]

 }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值