看懂 typedef 的方法

之前无论是阅读 C 代码还是 C++ 代码的时候, 都会遇到比较复杂的 typedef, 当时我都是靠上下文的操作直接猜出意思, 好处就是快, 坏处自然是总不能次次都猜出来......

今天看 pdf 的时候突然心血来潮要搞清楚到底是什么意思, 于是在 google 了 typedef 含义和看了几篇博客之后我总结了一下看懂 typedef 的方法:

1. 找到别名

2. 由左而右, 由内而外

例子:

1) typedef Point3d& (Point3d::*pmfPoint3d)(const Point3d&);

i. 别名是 pmfPoint3d; ii. 右边没有, 往左看得知这是个指针. iii. 跳出这个括号再看, 是个返回值为 Point&, 参数为 const Point3d& 的函数指针.

因此 pmfPoint3d 就是个返回值为 Point&, 参数为 const Point3d& 的函数指针无疑.

2) typedef void (*b[10]) (void (*)());        // 没错, 这不是正则表达式

i. 别名是 b; ii. 往右看, b 是个含有 10 个元素的数组, 再往左看, b 是个含有 10 个指针的数组; iii. 跳出这个括号再看, 是个含有 10 个返回值为 void, 参数为 返回值为 void, 参数为空的函数指针的函数指针的数组.

因此, b 就是个含有 10 个返回值为 void, 参数为 返回值为 void, 参数为空的函数指针的函数指针的数组.

额, 我怀疑是不是有人还是看不懂......这么说, b 是个含有 10 个元素的数组, 数组里的元素是函数指针, 这个指针所指的是一个函数, 这个函数的返回值是 void, 参数又是个函数指针, 这个指针指的又是一个返回值为 void, 参数为空的函数, 就酱.

3) doube(*)() (*e)[9];        //最后一个例子

i. 别名是 e; ii. 右边没有, e 是个指针; iii. 跳出括号, 往右, e 是一个指向含有 9 个元素的数组的指针, 往左, e 是一个指向含有 9 个 (返回值为 double, 参数为空的函数指针) 的数组的指针..

以上就是我看了 typedef 之后又想了五分钟之后总结出的方法, 所以必然会有疏忽, 希望看出问题朋友斧正, 一起交流进步, 妈妈再也不怕我看到复杂的 typedef 蛋疼了!

时间: 2024-11-14 09:16:58

看懂 typedef 的方法的相关文章

人人都能看懂的工厂方法模式和抽象工厂模式的区别

设计模式中的工厂方法模式和抽象工厂模式一直不知不觉地使用在程序设计中,但是就是经常只有实践没有进行理论指导,所以感觉有一点半路子出家而没有系统学习过的不踏实的感觉.现在总结了一下之前项目中使用过的抽象工厂模式,加强对创建型模式中工厂模式的理解. 先举个栗子感性的理解工厂方法模式和抽象工厂模式这两者的区别. 有一个富商,在深圳开了三个手机厂,分别代工苹果手机,三星手机,华为手机.富商经常视察这3个厂,在苹果手机厂就说"大家要做好苹果手机",在三星厂就说"大家要做好三星手机&qu

【转】如何看懂源代码--(分析源代码方法)

如何看懂源代码--(分析源代码方法) --转至 https://blog.csdn.net/luka_ye/article/details/79565902[PS:不知道原作者是哪位大牛,受益了] 我们在写程序时,有不少时间都是在看别人的代码. 例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会"噜看噜苦(台语) " 不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的源代码解读感到压力. 网路上有一篇关于分析看代码的方法,做为程序设计师

怎样看懂电路板?电路板短路检查方法是什么?

来源:https://www.xianjichina.com/news/details_88483.html 电路板相信很多的电力技术人员都很熟悉和了解,电子电路在工业自动化和智能化的控制当中应用相当广泛,电路板之所以能得到越来越广泛地应用,因为它有很多独特优点,概栝如下,具有可高密度化.100多年来,印制板高密度能够随着集成电路集成度提高和安装技术进步而发展着.具有高可靠性.通过一系列检查.测试和老化试验等可保证电路板长期而可靠地工作着.具有可设计性.对电路板各种性能要求,可以通过设计标准化.

sql-查看执行计划的方法

sql执行计划:把SQL语句拆分为每个的操作步骤组合,按照一定的顺序执行得出结果,查看并看懂执行计划是调优的关键步骤 查看执行计划的方法 DBMS_XPLAN包 sql*plus AUTO trace V$SQL_PLAN.DBA_HIST_SQL_PLAN ?/rdbms/admin/awrsqrpt.sql 工具类:toad.pl/SQL DEV 跟踪dump:10046,10053 大多数人比较喜欢用工具直接看,以下来说明这些方式的不同用处 一.DBMS_XPLAN包 10g以后可以查看A

轻松看懂机器学习十大常用算法

轻松看懂机器学习十大常用算法 通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普. 以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个节点提一个问题,通过

看懂此文,不再困惑于 JS 中的事件设计

看懂此文,不再困惑于 JS 中的事件设计 今天刚在关注的微信公众号看到的文章,关于JS事件的,写的很详细也很容易理解,相关的知识点都有总结到,看完就有种很舒畅的感觉,该串起来的知识点都串起来了.反正一字节:爽. 作者:aitangyong 链接:blog.csdn.net/aitangyong/article/details/43231111 抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 javascript给DOM绑定事件

你的计算机也可以看懂世界(一)——十分钟跑起卷积神经网络(Windows+CPU)

学习.使用卷积神经网络已经挺久了,期间一直在基于贾扬清大神的Caffe框架来研究别人的模型,抑或是在无聊的时候以近似于算命一样的方式,眼睛微闭,摇头晃脑,口中不时漏出几个音节,半晌便DIY出一个自认为改进颇多的模型,然后去跑一下,当然结果是非常惨淡的(要不然我就直接发论文了哪有这么闲还来写博客...),从这个过程中,我深刻地体会到了"前人栽树后人乘凉"这句话的正确性,虽然贾大神这个前人也不比我等大上几岁.今天听说贾大神宣布了最新的可以在移动设备上进行训练和测试的Caffe框架,心想我知

看懂UML类图和时序图

内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码对应起来: 有了这些知识,看后面章节的设计模式结构图就没有什么问题了: 本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patterns.EA

看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&amp;Setters

本篇文章很简单,就是把下面这段Gradle脚本打回原形: version = 1.0 Groovy语法糖 Java程序员对JavaBeans和Getter/Setter方法肯定不陌生,所以就不过多介绍了.虽然现代的IDE都提供了快捷方式,可以很方便的给字段生成Getter和Setter方法,但我还是很讨厌他们.还好,有Groovy的语法糖在手,就可以跟Getter/Setter方法说再见了!上面的脚本,实际上是调用Project接口的setVersion方法: project.setVersio