精华内容
下载资源
问答
  • 定义函数指针类型

    千次阅读 2011-08-31 10:05:11
    用typedef定义函数指针的形式如下:  typedef 返回类型(*新类型)(参数表) 比如先声明一个函数: int FactorialFun(int a) //求a的阶乘 {  int Fact=1;  int i;  for(i=1;i  Fact=Fa

    用typedef定义函数指针的形式如下:

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

    比如先声明一个函数:

    int FactorialFun(int a) //求a的阶乘
    {
     int Fact=1;
     int i;
     for(i=1;i<=a;i++)
      Fact=Fact*i;
     return Fact;
    }

    typedef int (*PFNFactorial)(int);     //宏定义FactorialFun函数指针类型

    void main()

         int n;

         PFNFactorial  facfun;

          facfun=FactorialFun;

         cin>>n;

         (*facfun)(n);

    }

    因此,typedef的功能是定义新的类型。前面是宏定义了一种PFNFactorial的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回int类型。

     

     

    展开全文
  • 定义函数指针类型&函数返回左值类值 <br /> 1。宏定义不分配内存,变量定义分配内存。 <br /> 2。宏名和参数的括号间不能有空格 <br /> 3。宏替换只作替换,不做计算,不做表达式求解...

    宏定义函数指针类型&函数返回左值类值

    1。宏定义不分配内存,变量定义分配内存。

    2。宏名和参数的括号间不能有空格

    3。宏替换只作替换,不做计算,不做表达式求解

    //下面是正确的标准的写法
    typedef int(FUNC1)(int in);
    typedef int(FUNC2) (int*,int*,int*);

    //下面两种宏的写法容易出错,是宏定义中应避免的,
    typedef int FUNC1 (int in);
    typedef int FUNC2 (int*,int*,int*);
    //当FUNC1为int*时,就容易造成歧义,有时不能达到我们所要求的目的。


    typedef int *p (int in);//表示p是一个函数,这个函数的返回类型是int* ,这个函数只有一个整型形参;
    typedef int(*p) (int*,int*,int*);//表示p是一个函数指针,这个函数指针指向的函数有三个整形指针形参,指向的函数返回类型是int 。 

    ##################################

    定义函数指针类型:

      typedef int (*fun_ptr)(int,int);

    以上gcc,g++中测试通过

    1 #include <sys/epoll.h>
    2 #include <pthread.h>
    3 #include <stdio.h>
    4 #include <unistd.h>
    5 int (*p)();//定义函数指针和函数指针类型在g++ gcc都可以
    6 typedef int& (*P)();//定义函数指针和函数指针类型在g++ gcc都可以
    7 P p1,p2;
    8 int x = 0;
    9 int& setx()//只在g++可以这样函数
    10 {
    11     return x;
    12 }
    13 int main (void)
    14 {
    15     p1 = setx;
    16     //p1()=92;
    17     printf("%d", p1());
    18     return 0;
    19 }
    为了您的安全,请只打开来源可靠的网址

    打开网站    取消
    来自: http://hi.baidu.com/jrckkyy/blog/item/d7ccb5086429c33ce8248866.html

    展开全文
  • 定义一个函数指针类型

    千次阅读 2014-06-26 15:46:48
    1、定义函数指针类型 // 定义一个原型为int Fun( int a );的函数指针 typedef int (*PTRFUN) ( int aPara ); 2、函数指针变量的定义 PTRFUN pFun; // pFun 为函数指针变量名 int (*pFun2) ( int a )...

    函数指针通常用来实现回调,其基本用法如下:

    1、定义函数指针类型

    // 定义一个原型为int Fun( int a );的函数指针

    typedef int (*PTRFUN) ( int aPara );

    2、函数指针变量的定义

    PTRFUN pFun;    // pFun 为函数指针变量名

    int (*pFun2) ( int a );   // pFun2也是函数指针变量名

    3、函数指针作为函数的参数传递

    // 定义回调函数

    int CallBack( int a ){

        return ++a;

    }

    // 定义回调者函数

    void Caller( PTRFUN cb )

    // void Caller( int (*cb) ( int ) ) // 也可这样申明

    {

        int nPara = 1;

        int nRet = cb( nPara );

    }

    // 使用回调

    void Test(){

        Caller( CallBack ); // 直接使用回调函数

        PTRFUN cb = CallBack; // int (*cb) ( int ); cb = CallBack;

        int nRet1 = cb( 99 ); // nRet1 = 100;

    }

    4、函数指针的指针使用

    // 定义函数指针的指针

    typedef int (**PTRPTRFUN) ( int aPara );

    // 函数指针的指针作为参数

    void PtrCaller( PTRPTRFUN cb )

    // void PtrCaller( PTRFUN* cb )           // 指针申明

    // void PtrCaller( int (**cb) ( int ) ) // 原型申明

    {

        int nRet = (*cb)(999); // nRet = 1000;

    }


    // 使用函数指针的指针

    void Test(){

        PTRFUN cb = CallBack;

        PtrCaller( &cb );

    }

    5、函数指针数组的使用

    // 函数指针数组的定义

    PTRFUN fArray[10];

    // int (*fArray[10]) ( int );   // 原型定义

    for ( int i = 0; i < 10; i++ ){

        fArray[i] = CallBack;

        int nRet = fArray[i](i);    // nRet = i+1;

    }

    6、函数指针的大小

    // 既然叫指针,所以跟普通的指针一样在32位系统下大小都为4

    int nSz1 = sizeof(PTRFUN);      // nSz1 = 4;

    int nSz2 = sizeof(PTRPTRFUN);   // nSz2 = 4;

    注意:

            编译器存在多种种调用规范,如在Visual C++中,可以在函数类型前加_cdecl,_stdcall或者_pascal来表示其调用规范(默认为_cdecl)。调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。

    ------------------------------------------------------------------------------------------------

    函数指针与typedef
    关于C++中函数指针的使用(包含对typedef用法的讨论) 
    (一)简单的函数指针的应用。
    //形式1:返回类型(*函数名)(参数表) 
    char (*pFun)(int); 
    char glFun(int a){ return;} 
    void main() 

          pFun = glFun; 
          (*pFun)(2); 

            第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
            第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址。
            然后就是可爱的main()函数了,它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中“*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。
    (二)使用typedef更直观更方便。 
    //形式2:typedef 返回类型(*新类型)(参数表)
    typedef char (*PTRFUN)(int); 
    PTRFUN pFun; 
    char glFun(int a){ return;} 
    void main() 

          pFun = glFun; 
          (*pFun)(2); 

              typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。
            第二行的代码便使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。
    (三)在C++类中使用函数指针。 
    //形式3:typedef 返回类型(类名::*新类型)(参数表) 
    class CA
    {
    public: 
          char lcFun(int a){ return; } 
    }; 
    CA ca;
    typedef char (CA::*PTRFUN)(int); 
    PTRFUN pFun; 
    void main() 

          pFun = CA::lcFun; 
          ca.(*pFun)(2); 

            在这里,指针的定义与使用都加上了“类限制”或“对象”,用来指明指针指向的函数是那个类的这里的类对象也可以是使用new得到的。比如: 
    CA *pca = new CA; 
    pca->(*pFun)(2); 
    delete pca; 
            而且这个类对象指针可以是类内部成员变量,你甚至可以使用this指针。比如:
            类CA有成员变量PTRFUN m_pfun; 
    void CA::lcFun2() 

         (this->*m_pFun)(2);
    }

            一句话,使用类成员函数指针必须有“->*”或“.*”的调用。

    1. #include <stdio.h>  
    2. #include <assert.h>  
    3.   
    4. typedef int (*FP_CALC)(int,int);//定义一个函数指针类型  
    5.   
    6. int add(int a, int b)  
    7. {  
    8.     return a + b;  
    9. }  
    10.   
    11. int sub(int a, int b)  
    12. {  
    13.     return a - b;  
    14. }  
    15.   
    16. int mul(int a, int b)  
    17. {  
    18.     return a * b;  
    19. }  
    20.   
    21. int div(int a, int b)  
    22. {  
    23.     return b ? a/b : -1;  
    24. }  
    25.   
    26. //定义一个函数,参数为op,返回一个指针,该指针类型为拥有两个int参数、  
    27. //返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址  
    28. FP_CALC calc_func(char op)  
    29. {  
    30.     switch( op )  
    31.     {  
    32.     case '+':  
    33.         return add;  
    34.     case '-':  
    35.         return sub;  
    36.     case '*':  
    37.         return mul;  
    38.     case '/':  
    39.         return div;  
    40.     default:  
    41.         return NULL;  
    42.     }  
    43.     return NULL;  
    44. }  
    45.   
    46. //s_calc_func为函数,它的参数是 op,     
    47. //返回值为一个拥有两个int参数、返回类型为int的函数指针    
    48. int (*s_calc_func(char op)) (int , int)  
    49. {  
    50.     return calc_func(op);  
    51. }  
    52.   
    53. //最终用户直接调用的函数,该函数接收两个int整数,  
    54. //和一个算术运算符,返回两数的运算结果  
    55. int calc(int a, int b, char op)  
    56. {  
    57.     FP_CALC fp = calc_func(op);  
    58.     int (*s_fp)(int,int) = s_calc_func(op);//用于测试  
    59.   
    60.     assert(fp == s_fp);// 可以断言这两个是相等的  
    61.   
    62.     if(fp)  
    63.         return fp(a,b);  
    64.     else  
    65.         return -1;  
    66. }  
    67.   
    68. void main()  
    69. {  
    70.     int a = 100, b = 20;  
    71.   
    72.     printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));  
    73.     printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));     
    74.     printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));     
    75.     printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));   
    76. }  

    展开全文
  • 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main() {  ...

    转载于:http://blog.csdn.net/vlily/article/details/7244682

    一、 定义某一函数的指针类型:
    就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。
    我先给你一个自定义数据类型的例子。
    typedef int* PINT;    //为int* 类型定义了一个PINT的别名
    int main()
    {
      int x;
      PINT px=&x;   //与int * px=&x;是等价的。PINT类型其实就是int * 类型
      *px=10;       //px就是int*类型的变量  
      return 0;
    }
    根据注释,应该不难看懂吧!(虽然你可能很少这样定义使用,但以后学习Win32编程时会经常见到的。)
    下面我们来看一下函数指针类型的定义及使用:(请与上对照!)
    //自行包含头文件
    void MyFun(int x);    //此处的申明也可写成:void MyFun( int );
    typedef void (*FunType)(int );   //这样只是定义一个函数指针类型
    FunType FunP;              //然后用FunType类型来申明全局FunP变量

    int main(int argc, char* argv[])
    {
    //FunType FunP;    //函数指针变量当然也是可以是局部的 ,那就请在这里申明了。 
       MyFun(10);     
       FunP=&MyFun;  
       (*FunP)(20);    

          return 0;
    }

    void MyFun(int x)  
    {
       printf(“%d\n”,x);
    }

    看黑体部分:
    首先,在void (*FunType)(int ); 前加了一个typedef 。这样只是定义一个名为FunType函数指针类型,而不是一个FunType变量。
    然后,FunType FunP;  这句就如PINT px;一样地申明一个FunP变量。
    其它相同。整个程序完成了相同的事。
    这样做法的好处是:
    有了FunType类型后,我们就可以同样地、很方便地用FunType类型来申明多个同类型的函数指针变量了。如下:
    FunType FunP2;
    FunType FunP3;
    //……
     
    二、 函数指针作为某个函数的参数
    既然函数指针变量是一个变量,当然也可以作为某个函数的参数来使用的。所以,你还应知道函数指针是如何作为某个函数的参数来传递使用的。
    给你一个实例:
    要求:我要设计一个CallMyFun函数,这个函数可以通过参数中的函数指针值不同来分别调用MyFun1、MyFun2、MyFun3这三个函数(注:这三个函数的定义格式应相同)。
    实现:代码如下:
    //自行包含头文件 
    void MyFun1(int x);  
    void MyFun2(int x);  
    void MyFun3(int x);  
    typedef void (*FunType)(int ); //②. 定义一个函数指针类型FunType,与①函数类型一至
    void CallMyFun(FunType fp,int x);

    int main(int argc, char* argv[])
    {
       CallMyFun(MyFun1,10);   //⑤. 通过CallMyFun函数分别调用三个不同的函数
       CallMyFun(MyFun2,20);   
       CallMyFun(MyFun3,30);   
    }
    void CallMyFun(FunType fp,int x) //③. 参数fp的类型是FunType。
    {
      fp(x);//④. 通过fp的指针执行传递进来的函数,注意fp所指的函数是有一个参数的
    }
    void MyFun1(int x) // ①. 这是个有一个参数的函数,以下两个函数也相同
    {
       printf(“函数MyFun1中输出:%d\n”,x);
    }
    void MyFun2(int x)  
    {
       printf(“函数MyFun2中输出:%d\n”,x);
    }
    void MyFun3(int x)  
    {
       printf(“函数MyFun3中输出:%d\n”,x);
    }
    输出结果:略
    分析:(看我写的注释。你可按我注释的①②③④⑤顺序自行分析。)

    展开全文
  • 就像自定义数据类型一样,我们也可以先定义一个函数指针类型,然后再用这个类型来申明函数指针变量。 我先给你一个自定义数据类型的例子。 typedef int* PINT; //为int* 类型定义了一个PINT的别名 int main
  • 使用 typedef 定义函数指针,更优雅的使用函数指针

    万次阅读 多人点赞 2018-08-24 09:23:56
    简介 关于函数指针的介绍,这里就不做过多说明了,不了解的同学可以...使用 typedef 定义函数指针 通过下面这个例子,我们看看 typedef 是怎么搭配函数指针使用的吧。 int add(int a, int b) { return a + b; ...
  • 函数指针和函数指针类型

    千次阅读 2018-09-29 08:48:59
    函数指针 1. 定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。 注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址 2. 语法 指向函数的指针变量...
  • 函数指针类型定义

    千次阅读 2018-06-29 16:39:24
  • 函数指针和指针函数用法和区别

    万次阅读 多人点赞 2018-05-24 08:11:10
    函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,...
  • 定义函数指针的两种形式

    千次阅读 2009-07-09 11:42:00
    定义函数指针的两种形式——林石 2009-07-...为了增加代码的可读性,一般都会通过typedef形式定义函数指针类型。有两种做法,如下:typedef return_type (*def_type)(arg_list);typedef return_type def_type(arg_list)
  • 利用typedef定义函数指针

    万次阅读 多人点赞 2018-06-20 16:14:13
    利用typedef定义函数指针2015年08月18日 10:56:46阅读数:4151利用typedef定义函数指针进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef ...
  • C++------------typedef 函数指针类型定义

    千次阅读 2013-12-27 11:28:15
    摘要bycrazyhacking:  typedef 是定义了一种“函数指针”类型,可以再声明很多变量。函数指针的定义是定义了一个变量。...1.定义函数指针类型: typedef int (*fun_ptr)(int,int); 2.声明变量,赋值: fun_
  • C语言结构体中定义函数指针详解

    万次阅读 多人点赞 2015-12-30 17:24:09
    在学习嵌入式我们经常和结构体函数指针打交道,还有链表,环形缓冲区之类的,这里中点讲解结构体中定义函数指针。下面这个程序你看一遍你基本也明白用法了。 下面是我写的一个很简单的程序struct.c #include /* 标准...
  • C语言定义函数指针

    千次阅读 2018-06-09 10:15:19
    //void (*p)(char s[]) 函数指针定义方法//void (*)(char *s) 函数指针类型int add(int a, int b){ return (a + b);}int sub(int a, int b){ return (a - b);}int main(int argc, char *argv[])...
  • c/c++ 函数类型和函数指针类型 详解

    万次阅读 2016-09-08 11:41:46
    今天解释下 函数类型和函数指针类型 1.函数类型 在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元存放一个地址值, 而函数指针存放的就是函数的入口地址. ...
  • 定义指向模板函数的函数指针类型

    千次阅读 2013-09-02 19:04:45
    现在需要定义一个指向模板函数的函数指针类型,查了相关资料得知现在c++好像不支持这个特性。 vs2008发现,不但不能用typedef定义指向模板函数的函数指针类型,1处所示;连定义一个指向模板函数的函数指针都不...
  • typedef 定义函数指针(匿名函数)

    千次阅读 2015-08-19 19:49:12
    原文地址:定义函数指针" href=... text-decoration:none">typedef 定义函数指针作者:兰音 http://blog.sina.com.cn/s/blog_54231
  • 结构体中定义函数指针

    千次阅读 2017-03-06 23:34:22
    结构体指针变量的定义定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一:struct结构体...
  • typedef 定义函数指针

    千次阅读 2007-11-19 13:57:00
    http://blog.sina.com.cn/u/5423100e010007jztypedef 定义函数指针 2007-01-24 09:50:34 大中小 关于C++中函数指针的使用(包含对typedef用法的讨论)(一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表...
  • C语言定义函数指针(typedef)

    千次阅读 2018-06-09 10:23:14
    #include &lt;stdio.h&gt;int add(int a, int b){ return (a +...}//使用typedef给函数指针类型一个别名//typedef没有定义新的类型,给已经有的类型起一个别名,减少输入typedef int (*padd)(int a, int b);/...
  • 使用typedef定义函数指针

    万次阅读 2012-03-05 15:59:02
    关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。 //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a) { return; } void main() {  ...
  • C++如何定义一个函数指针

    千次阅读 2019-06-13 11:08:19
    首先给出一个函数 int function(int a) { return a; } 一、定义一个函数指针 ...二、定义一个函数指针类型 typedef int (*function_p)(int a); //定义一个实体函数指针 funcyion_p fun; /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 648,177
精华内容 259,270
关键字:

定义函数指针类型