



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言函数指针的几种用法Free_Bird主要参考了:/space.php?uid=9950859&do=blog&id=98594写的很好;在此感谢高手们的无私;以下是我编写的一段程序,希望能帮到需要的xdjm;程序如下:#include #include /*-指针的应用都在主函数里,前面都是准备工作-*/*-*/*-简单应用指针的前期准备-*/*-*/声明并定义 一个变量、一个数组 和 一个函数 double R = 0;unsigned char Temp10 = 9,8,7,6,5,4,3,2,1,0;void delay_ms(unsigned int n) unsigned int i,j; for(i = 0; i n ; i+) for(j = 0; j 2280; j+); /声明一个指向无符号字符型的指针 和 一个函数指针unsigned char *pT;void (*pF)(unsigned int n);/*-*/*-应用函数指针的前期准备-*/*-*/*-相关函数的声明和定义-*/int add(int a, int b)int sum; sum = a + b; return sum;int sub(int a, int b)int difference; difference = a - b; return difference;int mul(int a, int b)int product; product = a * b; return product;int div(int a, int b)int division; division = a / b; return division;int UnKnown(int a,int b)return 0;/*-函数指针的第一种用法:作为其他函数的参数-*/关于下面这个函数的理解:首先分析这个函数的参数,前两个参数是整形,/ 第三个参数是一个函数指针,既然是函数指针,/ 那么给第三个参数赋值时,/ 就应该是函数的入口地址,即 函数名;/ 调用时:calculator(5,9,mul);/函数的声明和定义double calculator1(int x, int y, int (*pfunc)(int, int) double result; result = (*pfunc)(x, y); return result;/*-函数指针的第二种用法:作为函数的返回值-*/直接声明和定义(思路不清晰,不推荐)int (*GetOperation1(unsigned char c)(int a,int b) switch (c) case a: return add; case s: return sub; case m: return mul; case d: return div; default: return UnKnown; /标准做法(思路清晰,推荐)/将PF转意声明成一个指向int add(int a, int b)型函数的函数指针类型typedef int (*PF)(int ,int);/importent/利用 PF 声明定义一个返回值为 指向int add(int a, int b)型函数指针 的函数PF GetOperation2(unsigned char c) switch (c) case a: return add; case s: return sub; case m: return mul; case d: return div; default: return UnKnown; /*-函数指针的第三种用法:函数指针数组(即所谓的函数指针表)-*/ /*-简单指针表实现过程:适用于简单逻辑-*/直接定义一个函数指针数组;int (*calculator24)(int , int ) = add,sub,mul,div;/*-标准指针表实现过程:适用于复杂的逻辑-*/第一步:定义 一些相关的位 #define X_bit_0 (10)/加#define X_bit_1 (11)/减#define X_bit_2 (12)/乘#define X_bit_3 (13)/除/第二步:声明和实现指针表里要用的函数/ . (这个之前做过了)/第三步:定义一个此种类型的结构体:/ X_bit是个标识,(*Calc)()是当标志有效时要执行的动作typedef struct unsigned char X_bit; int (*Calc)(int,int);Example;/第四步:建立函数指针表Example Calcultor4= X_bit_0,add,X_bit_1,sub,X_bit_2,mul,X_bit_3,div;void main() /*-简单的指针应用-*/ /给指针赋值 pT = Temp; / pT = &Temp0;也可以 F = delay_ms; / F = &delay_ms;也可以 /引用指针 /*-自我约束:为了程序的可读性,在引用函数指针时,一律用 (*pF)(形参表)的格式-*/ R = *(pT+2); /指向数组的 (*pF)(5000); /指向函数的 /*-函数指针的应用-*/ /基本应用:用指针来调用函数 (*pF)(unsigned int)R); /函数指针的第一种用法:将函数指针 作为参数 R = calculator1(3, 5, sub); /函数指针的第二种用法:将函数指针 作为函数的返回值 unsigned char Op = s;/这个变量的值应该是外面传进来的,如中断等 /简单的 R = (*GetOperation1(Op)(4,3); /标准的 R = (*GetOperation2(Op)(5,7); /函数指针的第三种用法:函数指针表 /简单函数指针表的应用 R = (*calculator20)(3, 5); /标准函数指针表的应用 unsigned char Type_Of_Calc = 2;/这个变量应该是外面传进来的,如中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家具托管协议书范本
- 餐饮加盟店选址评估合同范本
- 环保产业项目投资与运营合作协议范本
- 仓储物流仓储管理员及货物保险合同
- 瓷砖设计与生产定制服务协议
- 餐饮加盟店加盟店品牌管理与市场拓展合同
- 担保合同法律风险及应对措施
- 草原草原土地流转及承包经营合同样本
- 峡谷桥梁风振响应监测
- ERAS快速康复之护理运用
- 2024年上海高中学业水平合格性考试历史试卷真题(含答案)
- 2025年人教版七年级数学下册期末测试卷
- 2025至2030年中国汽车轮毂轴承行业市场全景评估及发展趋势研判报告
- 2025年《安全生产月》活动总结报告
- 2025年江苏高考真题化学试题(解析版)
- 小学一年级数学下册应用题100道
- 2024协警辅警考试公安基础知识考试速记辅导资料
- 安徽省马鞍山市2023-2024学年高一下学期期末教学质量监测化学试卷(含解析)
- 初三化学最后一课-主题班会【课件】
- 反诈骗(企业员工)讲座培训课件
- 中国强军之路课件
评论
0/150
提交评论