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

中国网站排名网德阳定制建站网站建设报价

中国网站排名网,德阳定制建站网站建设报价,台州服务网站,wordpress将公网ip改为域名目录 前言#xff1a; 一、函数指针变量的概念 二、函数指针变量的创建 三、函数指针变量的使用 四、两段特殊代码的理解 五、typedef 六、函数指针数组 总结#xff1a; 前言#xff1a; 本文主要讲述C语言指针中的函数指针#xff0c;包括函数指针变量的概念、创建… 目录 前言 一、函数指针变量的概念 二、函数指针变量的创建 三、函数指针变量的使用 四、两段特殊代码的理解 五、typedef 六、函数指针数组 总结 前言 本文主要讲述C语言指针中的函数指针包括函数指针变量的概念、创建及使用。两段特殊代码的理解typedef关键字的使用以及函数指针数组的使用最后还有一个代码案例--计算器的实现。希望对大家有所帮助。 一、函数指针变量的概念 函数指针变量是用于存储函数地址的指针变量 那么函数有地址吗函数名与地址有关吗 简单测试一下 我们发现函数名和取地址函数名得到的地址是一样的 函数名本身可以被视为一个地址指向函数代码的起始位置这与函数名一样使用起来并无区别 二、函数指针变量的创建 既然函数名和函数名得到了函数的地址我们要存储这种地址就需要创建函数指针变量 定义语法函数返回类型*变量名形参类型形参类型 如 调试监视其值 观察类型我们可以得知函数指针变量的类型就是去掉变量名剩下的就是函数指针变量的类型 函数指针类型解析 int  (*pf4) (int x, int y) intpf4指向的函数类型pf4函数指针变量名*表明其为指针变量(int x, int y)pf4指向函数的参数类型和个数的交代 三、函数指针变量的使用 通过函数指针调用指针指向的函数 使用方法1 该方法就是通过解引用指针找到函数地址然后传入参数接收返回值 使用方法2 直接写函数指针变量的变量名然后传入参数这与直接写函数名传入参数是一样的因为该指针变量值就等于函数名的地址 其实方法1中*pf前面的*号本身无实际作用 我们无论写多少*号结果是一样的编译器没有对这个符号进行相关操作故相当于摆设了不过为了提高可读性一般是写一个*号 注意*pf必须用括号括起来因为左边优先级高于*号不加括号会被编译器认为是解引用函数的返回值而这是一个非法访问 四、两段特殊代码的理解 1.( *(  void (*)()  ) 0 ) () 请问这段代码是什么意思 这其实是一次函数调用的代码调用0地址处的函数 那么如何分析这段代码呢我们画图来理解 注意该代码出自《C陷阱与缺陷》一书情景是一位程序员需要写一个独立运行于某种微处理器上的C程序当计算机启动时硬件将调用0地址处的子例程函数。于是设计出了这段代码 2.void ( *signal( int , void(*)(int) ) )(int); 请问这段代码是什么意思 答案是这是一个函数声明。我们画图分析 以上难以理解的可能就是第3步按照以往的理解理论上函数的返回类型不应该写在函数名前面吗也就是下面这样 我们发现把 void(*)(int) 的返回类型写在函数名前面编译器报错了 这其实是语法规定的函数指针作为返回类型函数名需写在类型的里面也就是*号的旁边上面那种才是正确的写法 五、typedef 我们发现上面那段代码是不是较难看懂如果能让其与一般函数写法一样也就是函数返回类型写在前面就好了这里就有一个方法使用typedef重命名 typedef对类型名进行重命名 例1重命名unsigned int 例2重命名数组指针 注意数组指针重命名重命名的名字要放在括号里边 现在就让我们把void ( *signal( int , void(*)(int) ) )(int)进行重命名 注意与数组指针一样我们重命名的名字要放在类型里面之后我们不管是以返回类型写在函数名前面还是以函数参数类型写在参数里都可以这样看代码是不是明朗了许多 六、函数指针数组 函数指针数组存储函数指针的数组数组的元素都是一个个类型相同的函数指针 定义语法见下面第二张图 例如 如上两个相同类型的函数指针变量我们可以定义可是当相同类型的函数多起来后如果我们需要储存这些函数的地址就需要数组来接收才方便了。 如 注意定义函数指针数组数组放在数组类型里边 调用数组元素时就正常使用下标传入参数即可 如果觉得以上内容简单我们可以实现一个简单案例 简单计算器的实现 #include stdio.hint Add(int x, int y) {return x y; }int Sub(int x, int y) {return x - y; }int Mul(int x, int y) {return x * y; }int Div(int x, int y) {return x / y; }void menu() {printf(***************************************\n);printf(********** 1.Add 2.Sub **********\n);printf(********** 3.Mul 4.Div **********\n);printf(********** 0.exit **********\n);printf(***************************************\n); }int main() {int(*pf_arr[5])(int, int) { 0,Add,Sub,Mul,Div };int input 0;do{menu();printf(请选择\n);scanf(%d, input);if (input 1 input 4){int a 0;int b 0;printf(请输入两个整数\n);scanf(%d %d, a, b);printf(%d\n, pf_arr[input](a, b));}else if (input 0){printf(程序退出\n);break;}else{printf(选择错误请重新选择:\n);}} while (input);return 0; } 总结 以上就是本文的全部内容了希望对大家有所帮助哪里有问题欢迎提出感谢大家的支持
http://www.w-s-a.com/news/502003/

相关文章:

  • 织梦做的网站如何上线广东省广州市番禺区南村镇
  • 网站设计的导航栏怎么做太原有网站工程公司吗
  • 苏州虎丘区建设局网站如何在一个数据库做两个网站
  • 淘宝天猫优惠券网站建设费用腾讯邮箱企业邮箱登录
  • 深圳福田做网站公司海航科技网站建设
  • 网站降权查询wordpress更换文章背景色
  • 大型电商网站开发金融企业网站建设公司
  • 成都营销型网站建设价格化妆品品牌推广方案
  • 深圳公司手机网站制作苏州网站推广哪家好
  • 网站建设开发方式包括购买学校网站建设费计入什么科目
  • 做简单网站的框架图中小微企业查询平台
  • 哪些网站可以免费做产品推广建设建设部网站
  • 网站开发销售怎么做django做网站
  • 淘宝客网站做百度竞价万网域名怎么绑定网站
  • 建设网站找哪个公司北京知名大公司有哪些
  • 专业彩票网站开发网站流量在哪设置
  • 网站建设对应的岗位榆林做网站公司
  • 网站建设公司怎么算专业js网站分页怎么做
  • 网和网站的区别phpcms和帝国cms哪个好
  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员
  • 成都 网站建设公司哪家好襄阳行业网站建设
  • wordpress 调用时间做网站seo的公司哪家好
  • 手机上网站搭建网站账户系统
  • 西乡网站的建设柳州建站
  • 宁夏网站建设怎么样互联网 网站设计
  • 成都关键词seo推广平台手机端关键词排名优化软件