当前位置: 首页 > news >正文

长宁企业网站建设linux是哪个公司开发的

长宁企业网站建设,linux是哪个公司开发的,商标网站建设,永久免费wifi函数指针数组的妙用 笔者在开发某软件过程中遇到这样一个问题#xff0c;前级模块传给我二进制数据#xff0c;输入参数为 char* buffer和 int length#xff0c;buffer是数据的首地址#xff0c;length表示这批数据的长度。数据的特点是#xff1a;长度不定#xff0c… 函数指针数组的妙用   笔者在开发某软件过程中遇到这样一个问题前级模块传给我二进制数据输入参数为 char* buffer和 int lengthbuffer是数据的首地址length表示这批数据的长度。数据的特点是长度不定类型不定由第一个字节buffer[0]标识该数据的类型共有25628 种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理并且我的模块包含若干个函数在每个函数里面都要作类似的处理。若按通常做法会写出如下代码 void MyFuntion( char* buffer, int length ) {     __int8 nStreamType buffer[0];     switch( nStreamType )     {        case 0:            function1();            break;        case 1:        ......        case 255:            function255();            break;      } } 如果按照这种方法写下去那么在我的每一个函数里面都必须作如此多的判断写出的代码肯定很长并且每一次处理都要作许多次判断之后才找到正确的处理函数代码的执行效率也不高。针对上述问题我想到了用函数指针数组的方法解决这个问题。   函数指针的概念在潭浩强先生的C语言程序设计这本经典的教程中提及过在大多数情况下我们使用不到也忽略了它的存在。函数名实际上也是一种指针指向函数的入口地址但它又不同于普通的如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个处理函数(及其实现)。 void funtion0( void ); …… void funtion255(void ); 其次定义函数指针数组并给数组赋值。 void (*fun[256])(void); fun[0] function0; …… fun[255] function(); 最后MyFunction()函数可以修改如下 void MyFuntion( char* buffer, int length ) {     __int8 nStreamType buffer[0];     *fun[nStreamType](); }   只要2行代码就完成了256条case语句要做的事减少了编写代码时工作量将nStreamType作为数组下标直接调用函数指针从代码执行效率上来说也比case语句高。假如多个函数中均要作如此处理函数指针数组更能体现出它的优势。 函数指针与typedef 关于C中函数指针的使用(包含对typedef用法的讨论) 一简单的函数指针的应用。 //形式1返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() {     pFun glFun;     (*pFun)(2); }         第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针这种函数参数是一个int型返回值是char类型。只有第一句我们还无法使用这个指针因为我们还未对它进行赋值。         第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针函数名指向该函数的代码在内存中的首地址。         然后就是可爱的main()函数了它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容当然也就是取出了函数glFun()的内容然后给定参数为2。 二使用typedef更直观更方便。 //形式2typedef 返回类型(*新类型)(参数表) typedef char (*PTRFUN)(int); PTRFUN pFun; char glFun(int a){ return;} void main() {     pFun glFun;     (*pFun)(2); }         typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型并定义这种类型为指向某种函数的指针这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。         第二行的代码便使用这个新类型定义了变量pFun此时就可以像使用形式1一样使用这个变量了。 三在C类中使用函数指针。 //形式3typedef 返回类型(类名::*新类型)(参数表) class CA {  public:     char lcFun(int a){ return; } }; CA ca; typedef char (CA::*PTRFUN)(int); PTRFUN pFun; void main() {     pFun CA::lcFun;     ca.(*pFun)(2); }         在这里指针的定义与使用都加上了“类限制”或“对象”用来指明指针指向的函数是哪个类的,这里的类对象也可以是使用new得到的。比如 CA *pca new CA; pca-(*pFun)(2); delete pca;         而且这个类对象指针可以是类内部成员变量你甚至可以使用this指针。比如         类CA有成员变量PTRFUN m_pfun; void CA::lcFun2() {     (this-*m_pFun)(2); }         一句话使用类成员函数指针必须有“-*”或“.*”的调用。 在调用动态库时习惯用typedef重新定义动态库函数中的函数地址函数指针如在动态库test.dll中有如下函数       int   DoCase(int, long); 则在调用动态库是有两种方法   1.  先声明一个与动态库中类型一致的指针函数变量         int (*DOCASE)(int ,long);//用于指向动态库中的DoCase函数地址         HINSTANCE gLibMyDLL NULL;        gLibMyDLL LoadLibrary(test.dll);        if(gLibMyDLL ! NULL)          {                    //得到函数地址                      DOCASE (int(*)(int,long))GetProcAddress(gLibMyDLL, DoCase);           }            //调用函数          int s DOCASE(1,1000);    2.用typedef定义一个指针函数typedef (*DOCASE)(int ,long);          HINSTANCE gLibMyDLL NULL;         DOCASE _docase;        gLibMyDLL LoadLibrary(test.dll);       if(gLibMyDLL ! NULL)           {                 _docase (DOCASE)GetProcAddress(gLibMyDll, DoCase);          }       //调用函数       int s_docase(1,1000);
http://wiki.neutronadmin.com/news/189948/

相关文章:

  • 珠海网站艰涩和专业网络营销外包
  • 外贸网站定制建站建筑效果图网站推荐
  • 宜春做网站公司asp网站建设项目实训
  • 西安网站建设seo竞价百度网站适配代码
  • 如何搭建静态网站wordpress汉化主题
  • 专业建设网站应该怎么做房地产建筑设计公司
  • 做网站的目标是什么网站百度地图代码
  • 网站建设分站要备案新安网站开发
  • 网站的建设及维护报告创建微信公众号要钱吗
  • 如何制作淘宝客网站定制开发响应式网站
  • 网站权重优化帮别人做ppt赚钱的网站
  • 网站seo步骤有没有专门做家乡图片的网站
  • asp.net网站连接mysql做门用什么网站好
  • 关于php网站建设的优秀论文公司注册流程2020
  • 电子商务网站建设需求分析报告网站建设硬件设备
  • 安徽企业平台网站建设南宁seo咨询
  • 网站内容计划合肥红酒网站建设
  • 比汉斯设计网站素材优秀的交互设计作品集
  • 绍兴网站制作多少钱做网站想要中立
  • 一站式做网站企业wordpress数据库清理
  • 外卖网站建设费用制作公众号的软件
  • 程序员做电商网站的公司好吗外贸业务员面试常见问题
  • 自己建立网站用什么软件建网站必须要服务器吗
  • 昆明网络公司网站建设泉州市建设系统培训中心网站
  • 网站建设如何设置登录页面stanley工具网站开发
  • 购买域名和网站化工课设代做网站
  • 建设开发有限公司网站建设路街道办事处门户网站
  • 汽车配件响应式网站wordpress 下载源
  • 创意设计团队河南网站优化
  • 怀化电视台网站网站建设一般需要什么软件