欢迎来到天天文库
浏览记录
ID:8803037
大小:15.16 KB
页数:4页
时间:2018-04-08
《c语言函数指针的几种用法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言函数指针的几种用法Free_Bird主要参考了:http://blog.chinaunix.net/space.php?uid=9950859&do=blog&id=98594写的很好;在此感谢高手们的无私;以下是我编写的一段程序,希望能帮到需要的xdjm;程序如下:#include#include/*--指针的应用都在主函数里,前面都是准备工作--*//*--------------------------------------------------
2、--------*//*------简单应用指针的前期准备------*//*----------------------------------------------------------*///声明并定义一个变量、一个数组和一个函数doubleR=0;unsignedcharTemp[10]={9,8,7,6,5,4,3,2,1,0};voiddelay_ms(unsignedintn){unsignedinti,j;for(i=0;i3、;}}//声明一个指向无符号字符型的指针和一个函数指针unsignedchar*pT;void(*pF)(unsignedintn);/*----------------------------------------------------------*//*------应用函数指针的前期准备------*//*----------------------------------------------------------*//*------相关函数的声明和定义------*/intadd(4、inta,intb){intsum;sum=a+b;returnsum;}intsub(inta,intb){intdifference;difference=a-b;returndifference;}intmul(inta,intb){intproduct;product=a*b;returnproduct;}intdiv(inta,intb){intdivision;division=a/b;returndivision;}intUnKnown(inta,intb){return0;}/*-5、-----函数指针的第一种用法:作为其他函数的参数------*///关于下面这个函数的理解:首先分析这个函数的参数,前两个参数是整形,//第三个参数是一个函数指针,既然是函数指针,//那么给第三个参数赋值时,//就应该是函数的入口地址,即函数名;//调用时:calculator(5,9,mul);////函数的声明和定义doublecalculator1(intx,inty,int(*pfunc)(int,int)){doubleresult;result=(*pfunc)(x,y);retur6、nresult;}/*------函数指针的第二种用法:作为函数的返回值------*///直接声明和定义(思路不清晰,不推荐)int(*GetOperation1(unsignedcharc))(inta,intb){switch(c){case'a':returnadd;case's':returnsub;case'm':returnmul;case'd':returndiv;default:returnUnKnown;}}//标准做法(思路清晰,推荐)//将PF转意声明成一个指向intadd7、(inta,intb)型函数的函数指针类型typedefint(*PF)(int,int);//importent//利用PF声明定义一个返回值为指向intadd(inta,intb)型函数指针的函数PFGetOperation2(unsignedcharc){switch(c){case'a':returnadd;case's':returnsub;case'm':returnmul;case'd':returndiv;default:returnUnKnown;}}/*------函数指针的第8、三种用法:函数指针数组(即所谓的函数指针表)------*//*------简单指针表实现过程:适用于简单逻辑------*///直接定义一个函数指针数组;int(*calculator2[4])(int,int)={add,sub,mul,div};/*------标准指针表实现过程:适用于复杂的逻辑------*///第一步:定义一些相关的位#defineX_bit_0(1<<0)//加#defineX_bit_1(1<<1)//减#defineX_bit_2(1<<2)//乘
3、;}}//声明一个指向无符号字符型的指针和一个函数指针unsignedchar*pT;void(*pF)(unsignedintn);/*----------------------------------------------------------*//*------应用函数指针的前期准备------*//*----------------------------------------------------------*//*------相关函数的声明和定义------*/intadd(
4、inta,intb){intsum;sum=a+b;returnsum;}intsub(inta,intb){intdifference;difference=a-b;returndifference;}intmul(inta,intb){intproduct;product=a*b;returnproduct;}intdiv(inta,intb){intdivision;division=a/b;returndivision;}intUnKnown(inta,intb){return0;}/*-
5、-----函数指针的第一种用法:作为其他函数的参数------*///关于下面这个函数的理解:首先分析这个函数的参数,前两个参数是整形,//第三个参数是一个函数指针,既然是函数指针,//那么给第三个参数赋值时,//就应该是函数的入口地址,即函数名;//调用时:calculator(5,9,mul);////函数的声明和定义doublecalculator1(intx,inty,int(*pfunc)(int,int)){doubleresult;result=(*pfunc)(x,y);retur
6、nresult;}/*------函数指针的第二种用法:作为函数的返回值------*///直接声明和定义(思路不清晰,不推荐)int(*GetOperation1(unsignedcharc))(inta,intb){switch(c){case'a':returnadd;case's':returnsub;case'm':returnmul;case'd':returndiv;default:returnUnKnown;}}//标准做法(思路清晰,推荐)//将PF转意声明成一个指向intadd
7、(inta,intb)型函数的函数指针类型typedefint(*PF)(int,int);//importent//利用PF声明定义一个返回值为指向intadd(inta,intb)型函数指针的函数PFGetOperation2(unsignedcharc){switch(c){case'a':returnadd;case's':returnsub;case'm':returnmul;case'd':returndiv;default:returnUnKnown;}}/*------函数指针的第
8、三种用法:函数指针数组(即所谓的函数指针表)------*//*------简单指针表实现过程:适用于简单逻辑------*///直接定义一个函数指针数组;int(*calculator2[4])(int,int)={add,sub,mul,div};/*------标准指针表实现过程:适用于复杂的逻辑------*///第一步:定义一些相关的位#defineX_bit_0(1<<0)//加#defineX_bit_1(1<<1)//减#defineX_bit_2(1<<2)//乘
此文档下载收益归作者所有