问题原型:
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]
}