C++中函数指针数组的使用方法.doc
上传人:sy****28 上传时间:2024-09-11 格式:DOC 页数:3 大小:21KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++中函数指针数组的使用方法.doc

C++中函数指针数组的使用方法.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

文章源自:HYPERLINK"http://www.vdisk.cn/mysfwg999"www.vdisk.cn/mysfwg999C++中函数指针数组的使用方法笔者在开发某软件过程中遇到这样一个疑问,前级模块传给我二进制数据,输入参数为char*buffer和intlength,buffer是数据的首地址,length标明这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28)种能够性。我的使命是有必要对每一种能够呈现的数据类型都要作处置,而且我的模块包括若干个函数,在每个函数里边都要作相似的处置。若按一般做法,会写出如下代码:voidMyFuntion(char*buffer,intlength){__int8nStreamType=buffer[0];switch(nStreamType){case0:function1();break;case1:......case255:function255();break;}若是依照这种办法写下去,那么在我的每一个函数里边,都有必要作如此多的判别,写出的代码必定很长,而且每一次处置,都要作许屡次判别之后才找到正确的处置函数,代码的履行功率也不高。对于上述疑问,我想到了用函数指针数组的办法处置这个疑问。函数指针的概念,在潭浩强先生的C言语程序设计这本经典的教程中提及过,在大多数情况下咱们运用不到,也疏忽了它的存在。函数名实际上也是一种指针,指向函数的进口地址,但它又不一样于一般的如int*、double*指针,看下面的比如来了解函数指针的概念:1intfuntion(intx,inty);2voidmain(void){3int(*fun)(intx,inty);4inta=10,b=20;5function(a,b);6fun=function;7(*fun)(a,b);8……}句子1界说了一个函数function,其输入为两个整型数,回来也为一个整型数(输入参数和回来值可为其它任何数据类型);句子3界说了一个函数指针,与int*或double*界说指针不一样的是,函数指针的界说有必要一起指出输入参数,标明这是一个函数指针,而且*fun也有必要用一对括号括起来;句子6将函数指针赋值为funtion,前提条件是*fun和function的输入参数和回来值有必要保持一致。句子5直接调用函数function(),句子7是调用函数指针,二者等效。当然从上述比如看不出函数指针的长处,意图主要是想引出函数指针数组的概念。咱们从上面比如能够得知,已然函数名能够经过函数指针加以保管,那们也一定能界说一个数组保管若干个函数名,这即是函数指针数组。正确运用函数指针数组的前提条件是,这若干个需求经过函数指针数组保管的函数有必要有一样的输入、输出值。这样,我作业中所面对的疑问能够处置如下:首要界说256个处置函数(及其完成)。voidfuntion0(void);……..voidfuntion255(void);其次界说函数指针数组,并给数组赋值。void(*fun[256])(void);fun[0]=function0;…….fun[255]=function();最终,MyFunction()函数能够修正如下:voidMyFuntion(char*buffer,intlength){__int8nStreamType=buffer[0];(*fun[nStreamType])();}只需2行代码,就完成了256条case句子要做的事,减少了编写代码时作业量,将nStreamType作为数组下标,直接调用函数指针,从代码履行功率上来说,也比case句子高。假设多个函数中均要作如此处置,函数指针数组更能体现出它的优势。