换一种思路看function pointers指针函数)
今天跟一个朋友聊到函数指针的问题,发现其实很多人不懂得如何解读一个函数指针的声明。其实有一个非常好用的法则,但我观察到很多视频或者文章里并没有提到,只是单纯告诉你他举的例子如何解读,换一个例子又不知道了。我给我那朋友解释完,他直惊呼“卧槽”,所以想分享出来,希望可以帮助到那个同样困惑的你。
我才发现B站不支持Markdown,没法插入代码块,只能贴图了:(
首先从简单的例子讲起,你至少需要知道这是一个函数指针:
整个声明有三个部分,fp是我们给它的名字,左边那个“*”说明它是一个指针,右边(int)是接受的参数类型,前面void是返回类型。你肯定想,
但是这个呢?
很多人即使大概能看懂,也没法自信的说就是这样,更没法给别人解释了。其实知道规则以后,会非常易读。我管这个规则叫右摇左摆法则,非常滑稽的名字,bear with me,但实际使用就是从中间看起,然后看它的右边,再看它的左边,再看右边,再看左边,直到结束。
所以上面这个例子,我们从fp1也就是中间开始看,
看中间,fp1,fp1是一个什么呢?
看右边,右边什么也没有,遇到括号表示告一段落。
看左边,是一个*,也就是pointer,所以fp1是一个指针,是什么样的指针呢?
看右边,(int),是一个接受一个int为参数的函数指针。
看左边,是一个*,也就是返回值是一个指针,是一个什么样的指针呢?
看右边,是[10],也就是返回一个指针指向一个数组,这个数组包含10个,10个什么呢?
看左边,是void*,哦,原来是包含10个void*的数组。
that's it! 用英文更好理解,因为英文的从句可以让上面这么多步连成一整句话。
(middle) fp1 is → (right, nothing) → (left) a pointer to → (right) a function that takes an int → (left) and returns a pointer to → (right) an array of 10 → (left) void pointers.
连起来就是:fp1 is a pointer to a function that takes an int and returns a pointer to an array of 10 void pointers.
是不是超简单?这个方法我其实是从Thinking in C++, Volume 1学到的,然后自己总结了下,并取了个沙雕但是个人认为有助于理解的名字,不懂为什么其他教程都没有这样教,再来一个:
f is a pointer to a function, that takes in an int* and a function pointer, which takes in two int* and returns an int*, and returns an int*.
用中文就是f是一个函数指针,接受一个int*和另一个函数指针作为参数,返回一个int*,它接受的那个函数指针参数呢,是一个接受两个int*作为参数,返回一个int*的函数指针。
说实话,我觉得解读函数指针的问题已经水落石出了,没法解释的更清楚了,再复杂也能按照这个逻辑去理解。当然,还有什么问题欢迎留言。
换一种思路看function pointers指针函数)相关推荐
- iOS换一种思路写一个无限轮播的滚动视图
换一种思路写一个无限轮播的滚动视图 写这篇博客已经距离我当时写差不多有一个月时间了,也完善了很多,基本是没有bug的,如果有,不妨留言,喜欢的话,劳烦各位点个赞,不喜欢的,不妨看看思路,提提意见 1. ...
- 【PS功能学习】12:让我们换一种颜色看世界(调色一)
第12节:让我们换一种颜色看世界(调色一) 本节学习目标: 1.色彩模式: 模式 说明 RGB模式 光学三原色,调色运用最多的一种模式 CMYK模式 印刷使用的颜色 灰度模式 图像不包含颜色,只有黑白 ...
- pycharm、idea换一种思路---延长试用(无限使用30天)
当你的pycharm试用一个月后是不是很崩溃,没钱买正版,又要拒绝盗版,很好的一个思路就是再装一个,继续试用一个月,这样的确有点麻烦,那就试试下面这个插件吧!!! 首先,下载这个文件https://d ...
- 换一种态度看程序员(转)
有这样一群人,他们经常孤独地工作到深夜,漆黑夜里的显示器成为房间中唯一的光源,手边残留着比萨饼和碳酸饮料.繁重的编码任务让他们很少离开座位,即便是周五的深夜,这些人依旧在办公室中奋战. 乍一听,这像是 ...
- 她从城市回到农村创业,后来有自己的林地,只是换了一种思路?
下岗后不服输的么学红,不甘心闲在家中无所事事,决心靠创业改变命运.她做过服装生意,还摆过摊卖过菜--但是几年闯下来,她始终也没有找到一条成功的道路. 么学红想,树挪死,人挪活,我就不信没有自己的路!换 ...
- 另一种思路比较2个日期是否相等的方式
我们在应用中经常会遇到2个日期比较是否同一年,或者同一个月或者同一日,等. 常规方式,我们通过逐个年,月,日的比较,才能确定是否是同一年,或同一个月或同一日. 我们换一种思路,把2个日期按同一个日期格 ...
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路
需求: 有两个多维数组 $arr = [['name'=>'dee','age'=>28],['name'=>'emperor', 'age'=>30],['name'=> ...
- 成员函数指针与高性能的C++委托 (Member Function Pointers and the Fastest Possible C++ Delegates)...
标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托(delegate)")在一些 ...
- 求两个链表的第一个公共结点各种情况及三种思路分析
转自:http://blog.csdn.net/ssopp24/article/details/72377184 1.寻找两个链表的第一个公共结//这道题可以有很多种思路, 我们按照, 有坏到好的顺序 ...
最新文章
- IIS6配置Asp.net MVC运行环境
- html 下拉框字体,怎么把select下拉菜单里的文字设置成左右滚动效果
- Docker cAdvisor安装
- 查看你某条sql是哪个用户执行的_django_debug_toolbar:查看访问某个页面执行sql的详细...
- angularjs的基础知识
- d3 v5 api shape.line
- 用HTML5制作简单的个人简历
- 基于Sobel算法的边缘检测简介
- Oracle 多行显示在一行详解(listagg)
- 处理 “回扣”的4种对策
- YNOI板刷计划记录
- 优质数据平台如何打造?从网易云音乐看内容生态的运营法则
- 计算机毕业设计jsp宠物美容网站
- [ArcGIS] 中文经纬度标注如何替换成英文的字母标注
- Virtuoso: 最全安装(IC618,IC617等), 问题解决
- fiddler安卓模拟器与ios手机抓包
- Android关联文件类型,使得自己app支持打开【加入到“用其它应用打开”的列表中】
- 洛谷P1386座位安排
- JustLaws 法律文库贡献指南
- 【ECshop错误集锦】解决ECShop发送邮件提示:Error: need RCPT command