函数指针与typedef
作者:单片机仿真   类别:随笔    日期:2021-09-03 15:46:48    阅读:462 次   消耗积分:0 分

    image.png    

    typedef 和 #define 很类似,区别是:typedef 是在编译过程中被解析的,而 #define 是在编译之前的预处理时被破解的; #define 只是对所定义的别名的简单替换,而 typedef 则要灵活的多。总的来说 typedef 可以做到 #define 能做到的所有事情,而且可以做得更好。

        还需要了解下函数指针的概念,(区别:函数指针是指向函数的指针,而指针函数是返回值是指针的函数。指针函数定义:int *fun(int x); 函数指针定义:int (*f)(int); )

        typedef void(*Func)(void) 是函数指针的类型定义,作用是声明一个 void(*)() 类型的函数指针 Func。

        作用举例:

        typedef void (*func)(void);

        void myfunc(void);

        func pfun = myfunc;    //赋值

        pfun();         //调用

        函数指针的好处:

        如果有三个类型或功能相似的函数:

        void Task1(void)    { printf("I'm Task1.\n"); }

        void Task2(void)    { printf("I'm Task2.\n"); }

        void Task3(void)    { printf("I'm Task3.\n"); }

        ... ...

        typedef  void (*func)(void);     //声明

        这样就构造好了一个通用函数,调用参见下面的代码:

        void gTask(char i)

        {

               func vTask[3] = (&Task1, &Task2, &Task3);

               func fun = vTask(i);

               (*fun)();

        }

        执行 gTask(1) 输出 “I'm Task1.”;执行gTask(2) 输出 “I'm Task2.”;执行 gTask(3) 输出 "I'm Task3."

        很多操作系统源码都用到 typedef void (*Func)(void)。


版权所有,转载本站文章请注明出处:proteus单片机
上一篇:联合体在单片机中的应用
下一篇:T51基于51单片机的自动吹泡泡机proteus仿真,keil程序,c语言
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}