• 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));  // 函数指针作为参数传递 
  • 相关阅读:
    状压DP入门
    二分图匹配(最大匹配:匈牙利算法)
    序列自动机入门
    Trie树入门+例题(字典树,前缀树)
    扩展KMP算法(Z-Algorithm)
    Oracle锁表查询和解锁方法
    oracle获取系统日期--当前时间+前一天+当前月+前一个月
    oracle获取年月日,两个日期相减
    oracle decode函数和 sign函数
    expdp、impdp数据泵导出导入数据
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13331407.html
Copyright © 2020-2023  润新知