Chinaunix首页 | 论坛 | 博客
  • 博客访问: 484137
  • 博文数量: 120
  • 博客积分: 1853
  • 博客等级: 上尉
  • 技术积分: 1177
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-22 22:40
文章分类

全部博文(120)

文章存档

2013年(16)

2012年(104)

分类: C/C++

2012-06-01 20:03:55

bool (*pf)(const string &, const string &);//这是函数指针
bool *pf(const string &, const string &);//去掉括号后,这是返回值为bool *类型的一个函数

1.typedef
          typedef  bool (*cmpFcn)(const string&, const string &);
2.初始化(bool lengthCompare(const string &, const string &))            
        cmmFun pf1 = 0;//可以初始化为0
        cmmFun pf1 = lengthCompare;//可以初始化为指向某个类型相符的函数,如果类型不符,则产生错误
        cmmFun pf1 = &lengthCompare;//取地址也可以。和上面的那个等价
3.调用
         pf("hi", "bye");
         (*pf)("hi", "bye");//这两种是等价的
4.函数指针形参
       void useBigger(const string&, const srin &, bool(const string&, const string &) );
       void useBigger(const string&, const srin &, bool(*)(const string&, const string &) );
//以上两个等价第三个参数是函数形式,并且自动的认为是一个指向函数的指针。
//the third parameter is a function type and is automatically treated as a pointer to function.
5.返回指向函数的指针
   int (*fun(int ))(int *, int);
返回的是指向 int (*)(int *, int)类型的函数。可以typedef int (*pf)(int *, int),然后 pf fun(int),这个和上面的是等价的。其中的typedef 可以这样理解 type int (*)(int *, int) pf;
    允许将形参定义为函数类型,但函数的返回类型则必须是指向函数的指针,而不能是函数。
6.指向重载函数的指针
    指针的类型必须与重载函数的一个版本精确匹配。如果没有精确匹配的函数,则对该函数指针的初始化赋值都将产生编译错误。精确匹配的意思是一点异样都不能有,必须完全一直,包括形参类型,函数名返回类型。如:
     extern void ff(vector );
     extern void ff(unsigned int);

   void (*pf)(unsigned int) = ff;//match  void ff(unsigned int)
   void (*pf2)(int) = ff;//error!没有精确匹配的版本

内联(inline)函数,建议编译器在调用点直接把函数展开。以减小系统开销。但是也仅仅是建议,如果代码太大的话也不会展开。不过如果大的话,最好就不要用内联函数了。
阅读(2113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~