zoukankan      html  css  js  c++  java
  • typedef的意义和函数指针

    再谈typedef(重点为函数指针)

    http://zjf30366.blog.163.com/blog/static/411164582009817101543293/

    typedef是什么,怎么用

    表面上typedef是给某一类型起别名,例如:

    typedef int* p;
    p pointer;

    实际上,在C99标准中是这样诠释的:"In a declaration whose storage-class specifier is typedef, each declarator defines an identifier to be a typedef name that denotes the type specified for the identifier in the way described in xx"

    参照这段描述,并拿typedef  int    *p作为例子来理解:在一个声明中,如果有存储类说明符typedef的修饰,标识符p将被定义为了一个typedef name,这个typedef name表示(denotes)一个类型,什么类型呢?就是int *p这个声明(declarator)中标识符(indentifier)p的类型(int*)。

    下面举例说明:

    例1:

    typedef double MYDOUBLE;
    MYDOUBLE a;

    去掉typedef,上面的语句是声明一个double类型的变量MYDOUBLE。加上typedef,MYDOUBLE这个标识符被定义为一个typedef-name,即去掉typedef所声明变量MYDOUBLE的类型,也就是double。

    例2:

    typedef int* Func(int);
    Func *fptr;

    去掉typedef,上面的语句声明一个函数名(标识符)为Func,返回值是指向int类型的指针,参数是int类型的函数。所以原语句会把Func定义为一个typedef-name,它表示的类型是返回值为int指针,参数是int的函数。

    例3:

    typedef int (*PFunc)(int);
    PFunc fptr;

    去掉typedef,上面的语句声明一个函数指针PFunc,该函数指针指向一个返回值和参数都是int的函数。所以原语句把PFunc这个标识符定义为一个typedef-name,它用来声明返回值和参数都是int的函数的函数指针。

    函数指针

    https://blog.csdn.net/zj1131190425/article/details/92065897

    获取函数指针:

    函数的地址就是函数名,传递函数名即可。

    声明函数指针:

    声明指针时,必须指定指针指向的数据类型。对于指向函数的指针,要指定函数类型(返回值类型和函数的参数列表)。

    double cal(int);   // prototype
    double (*pf)(int);   // 指针pf指向的函数, 输入参数为int,返回值为double 
    pf = cal;    // 指针赋值

    使用指针调用函数

    double y = cal(5);   // 通过函数调用
    double y = (*pf)(5);   // 通过指针调用 推荐的写法 
    double y = pf(5);     // 这样也对, 但是不推荐这样写

    将函数指针作为函数的参数传递

    void estimate(int lines, double (*pf)(int));  // 函数指针作为参数传递 
  • 相关阅读:
    MySQL中文显示乱码
    mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
    mysql 分表的3种方法
    mysql 清空或删除表数据后,控制表自增列值的方法
    MySQL 下优化SQL语句的一些经验
    mysql 常用命令
    MySQL获得指定数据表中auto_increment自增id值的方法及实例
    SQL Server Alwayson创建代理作业注意事项
    LinkedList子类与Queue接口
    List接口
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13331407.html
Copyright © 2011-2022 走看看