• typedef void (*funcptr)(void)


    
    
    这些都是为一些“函数指针”类型定义一个别名,因为函数指针的类型通常十分长,写起来麻烦。
    http://zhidao.baidu.com/link?url=E7C4s3srK-QzUqI5OZBSst-fzFKgtGyNaZf2GWEWvW8ruHC8XI1v4RjxsXZ8SvArPewsrPlXjy3F3SkkIB3-Hq
    例如第一个,这个函数的原型是void f(CO_Data*);,
    经过了typedef void (*post_sync_t)(CO_Data*);后,post_sync_t就是f类型函数的指针的类型别名。

    这时你可以这样定义一个变量:post_sync_t p;,p就是一个指向f类型函数的指针。
    可以这样给p赋值,p=&f。

    如果你不typedef的话,定义p时你就得这样写:void (*p)(CO_Data*);


    http://zhidao.baidu.com/question/170422609.html?fr=qrl&index=0&qbl=topic_question_0&word=typedef%20void%20%28%2AFPtr%29%28void%29%3B

    定义一个函数指针类型。
    比如你有三个函数:
    void hello(void) { printf("你好!"); }
    void bye(void) { printf("再见!"); }
    void ok(void) { printf("好的!"); }

    typdef void (*funcptr)(void);
    这样就构造了一个通用的函数
    你用的时候可以这样:
    void speak(int id)
    {
    funcptr words[3] = {&hello, &bye, &ok};
    funcptr fun = words[id];
    (*fun)();
    }

    这样的话,如果speak(0)就会显示“你好!”
    speak(1)就会显示“再见!”
    speak(2)就会显示“好的!”

    用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。

    比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等

    eg.
    typedef void (*funcptr)();
    void hello(void) { printf("你好!
    "); }
    void bye(void) { printf("再见!
    "); }
    void ok(void) { printf("好的!
    "); }
    void speak(int id)
    {
        funcptr words[3] = {&hello,&bye,&ok};
       funcptr fp = words[id];
       (*fp)();
    }
    
    
    int main()
    {
        speak(0);
        speak(1);
        speak(2);
        return 0;
    }
    
    




    热心网友
    typedef void (*T) (void *);定义了一个指向函数的指针T,其返回值 void 类型,参数也是后面的(void *)接下来我们就可以直接使用 T 来定义这种指针变量,比如:T fn1; //等价于void fn1 (void *); 
    使用:void func(void *); //声明函数
    T fn1; //定义变量
    fn1=func; //赋值
    (*fn1)(); //执行
  • 相关阅读:
    jquery swipper插件的一些弊端
    linux ffmpeg 源码安装教程
    二叉树遍历(宽度优先)入门
    node安装教程
    Check the string CodeForces
    Minimize the error CodeForces
    sourcestress 问题解决方案
    C++ substr
    Java 读取Excel文件
    Stall Reservations
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/4868970.html
Copyright © 2020-2023  润新知