您的位置:首页 > 其它

typedef函数指针

2015-07-10 16:13 288 查看
  由于之前学习C++这块内容并没有经过太多实践,这块内容已经忘记了不少,现在学到动态库用到这块内容,又重新整理了。接下来的几天将会学习更多的动态库静态库的知识,学完之快内容之后,就学习excel等office方面编程技术!

  常规的函数指针是这样定义的:

 1 ////这里有一个函数体fun1
void fun1(int a)
{
return a*3;
}

//////这里定义了一个函数指针pfun1
void (*pfun1)(int);

///////这里的pfun1就可以指向fun1函数了
pfun1=fun1;

//////pfun1指向了fun1之后,就可以使用pfun1调用fun1函数了
(*pfun1)(5);            //返回结果是5*3=15

///////备注:这里的定义了函数指针的形式可能比较难理解,其实认真想一想也确实应该这样定义的,因为我们在声明一个变量的时候,是这样声明的:int a; 声明一个int类型的指针的时候是这样声明的:int *pa;   这里声明指针的方式只不过是把变量名给挖空,然后填上(*指针变量名) 而已。
////////同理,我们在声明函数指针的时候,也是和声明变量指针有些类似,也是把函数名给挖空,然后填上(*指针变量名),所以这样推断就有了void (*pfun1)(int)了,这个函数指针只能指向返回值类型为void,并且函数的参数只有一个int类型的函数。


  typedef函数指针是这样定义的:

///////typedef定义的函数指针类型

/////这里定义有了一个函数fun2
double fun2 (int a,double b)
{
return a+b;
}

//////这里定义有了一个f_pfun函数指针类型,这里只是一个类型,并不是一个实际的变量
typedef double (*f_pfun)(int,double);

/////上面定义了一个函数指针类型之后,就可以通过这个函数指针类型来定义函数指针了
f_pfun pfun;      //这里声明了一个函数指针变量 pfun
pfun=fun2;        //这里讲这个pfun指向了fun2函数

//////备注:所以上面的typedef定义的函数指针类型是比较方便和明了的,因为typedef实际上就是定义一个新的数据类型,typedef有这样的一个作用,就可以用它来定义函数指针类型,这个定义的函数指针类型是能够指向返回值是double的,并且函数的参数只有int和double两个参数的函数。
//////typedef的用法为:typedef 原类型名 别名;
/////所以这里定义的typedef double (*f_pfun)(int,double);就相当于把double (*) (int,double)定义成了另一个别名 f_pfun了。这个f_pfun就表示了函数指针类型了,注意这里的double (*)(int ,double)实际上不存在这样的写法,只是为了方便理解,这样的写法是不允许的,也是错误的!这样的写法并不代表是一个类型!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: