在学习windows API的时候,遇到下面这段代码
 
以前见过的typedef的用法都是给一个数据类型取一个别名
typedef oldTypeName newTypeName
 
这种给数据类型取一个函数名字的还是第一次看到,
于是做了一下实验,如下图:
上图定义了一个TemplateFn模版函数和Addition函数,
用TemplateFn声明了一个变量a,并将Addition赋值给a,
结果编译器报错:
如上图蓝色光标所示,数据不匹配。
原因是因为Addition返回的是一个函数指针,也即地址类型,
而变量a接收的不是一个地址类型的数据,
 
修改一下代码,如下图将TemplateFn改成函数指针
接下来编译通过。
 
实验做到这里,还是存在很多的疑惑,
究竟为什么要typedef int (*TemplateFn)(int, int)这么定义?
于是又做了一个实验,从函数指针下手
 
 通过下图的测试代码,终于搞清楚了
 
原来定义一个函数指针的方式如下:
returnType(*valName)(paramType)
 
而typedef int (*TemplateFn)(int, int)的作用,
就是将上面int (*a)(int, int)定义变量a的代码简化成用TemplateFn来代替,
使代码更加简介清晰。
 
那么另外一个问题来了,函数指针一般的用途是在哪里?
我目前想到的一个就是在struct的时候。
关键字struct是在C语言中定义结构体的,它不像C++的类一样有成员函数,
不过它可以通过函数指针来实现结构体的成员函数,例如下面的定义:
上面定义了一个学生的结构体,包含了姓名、性别、年龄以及学生主修的专业,
每一个学生主修的专业方向不同,所以为Major赋予不同的函数指针。
 
上面就是我对typedef使用的个人理解。
 

最新文章

  1. MySQL 分区介绍总结
  2. 【51Nod 1674】【算法马拉松 19A】区间的价值 V2
  3. ios企业应用部署
  4. android中的requestFocus标签
  5. jQuery插件实例一:年华时代插件Alert对话框
  6. android128 zhihuibeijing 科大讯飞 语音识别
  7. 20151225jquery学习笔记---编辑器插件
  8. Deep Learning论文笔记之(八)Deep Learning最新综述
  9. bootstrap 兼容IE8设置
  10. bootstrap table笔记
  11. 利用ckeditor 富文本编辑插件静态化网页
  12. java学习(二)--excel导出
  13. 听翁恺老师mooc笔记(7)--字符串1
  14. 双击CAD对象(具有扩展数据),显示自定义对话框实现方法
  15. PTA_输入符号及符号个数打印沙漏(C++)
  16. [jQ/PHP]使用JS数组储值的两种情况(提交PHP处理)
  17. 通过修改CR0寄存器绕过SSDT驱动保护
  18. Coursera台大机器学习技法课程笔记13-Deep Learning
  19. Java内存模型和JVM内存管理
  20. python学习笔记011——函数式编程

热门文章

  1. 【bzoj1004】 HNOI2008—Cards
  2. Beta版本冲刺第六天
  3. Anaconda 安装 ml_metrics package
  4. Hibernate--------八大类HQL查询集合
  5. UML大战需求分析--阅读笔记01
  6. 轮播插件unsilder 源码解析(一)---源码解析
  7. 旧版本APP被开发人员下架,新版本重新上传依然显示被下架
  8. setTimeout 和 setInterval 的区别
  9. 深入理解javascript原型和闭包 (转)
  10. 学习MySQL之数据类型(四)