zoukankan      html  css  js  c++  java
  • 用typedef定义函数指针的问题

    在学习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使用的个人理解。
     
  • 相关阅读:
    两栏自适应布局
    说说bfc 和 HasLayout
    春联式弹动广告
    Centos7安装完毕后重启提示Initial setup of CentOS Linux 7 (core)的解决方法
    2016年新剧《欢乐颂》里面的经典台词
    硬盘怎么保养
    如何保养与维护笔记本硬盘
    仔细看完,你会成为微信高手
    电脑之间用网线直接连接起来快速传送大文件技巧
    阿里云9折优惠码 GQH4IT 使用方法如下:
  • 原文地址:https://www.cnblogs.com/zhengjiafa/p/5796283.html
Copyright © 2011-2022 走看看