typedef定义函数指针

    技术2024-06-29  70

    1。简单的函数指针

         形式: 返回类型 (*函数名)(参数表)

                    char (*pFun)(int);   //定义一个指针变量pFun.它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。

     

                    char glFun(int a){ return 'a';}//定义函数glFun()。函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址。

     

                    void main()

                    {

                         pFun = glFun;

                         (*pFun)(2);

                    }

    2。使用typedef更直观更方便

          形式: typedef 返回类型(*新类型)(参数表)

                     typedef char (*PRTFUN)(int)

                     PRTFUN pFun;

                     char glFun(int a){return 'a';}

                     

                     void main()

                     {

                          pFun = glFun;

                          (*pFun)(2);

                     }

    3.在c++类中使用函数指针。

          形式: typedef 返回类型(类名::*新类型)(参数表)

                     class Screen

                     {

                           public:

                                     char lcFun(int a){return 'a'};

                     };

                     

                     Screen screen;

                     

                     typedef char (Screen::*PTRFUN)(int);

                     PTRFUN pFun;

                     void main()

                     {

                          pFun = Screen::lcFun;

                          cout << (screen.*pFun)(2)<<endl; //需要加括号,因为()的优先级大于.

                     }

         或:

                      class Screen

                     {

                           public:

                                     char lcFun(int a){return 'a'};

                     };

                     

                                      

                     typedef char (Screen::*PTRFUN)(int);

                     PTRFUN pFun;

                     void main()

                     {

                          Screen *screen = new Screen;

                          pFun = Screen::lcFun;

                          cout << (screen->*pFun)(2)<<endl;  //需要加括号,因为()的优先级大于->

                          delete screen;

                     }

    最新回复(0)