首页 > 代码库 > 浅谈指向函数的指针和指针函数

浅谈指向函数的指针和指针函数

指向函数的指针,顾名思义,不用解释。而指针函数是返回值为某一类型指针的函数(这个简单)

 

指向函数的指针:

 写在前面的话,注意指向函数的指针不可以直接拿来写函数体,至于为什么,我还没有搞懂,例如:

int (*comp) (const void*, const void*){}  这样是不行的  无论用comp还是*comp还是(*comp)都不能调用函数!!

假设有以下语句:

typedef bool (*cmpFcn) (const string &, const string &);    (C++) 

该定义表示cmpFcn是一种指向函数的指针类型的名字,该指针类型为“指向返回bool类型并带有两个const string 引用形参的函数的指针

假设有如下函数:

bool lengthCompare (const string &, const string &);

则可以有:

cmpFcn pf = lengthCompare 或

      cmpFcn pf = &lengthCompare

  所以指向不同函数类型的指针之间不存在转换 

通过指针调用函数 :

lengthCompare ( "hi", "bye");

pf ("hi", "bye");

(*pf) ("hi", "bye");

函数指针形参:

函数的形参可以是指向函数的指针,例如:

void useBigger (const string &, const string &, bool (const string &, const string &));

void useBigger (const string &, const string &, bool (*) (const string &, const string &)); 

返回指向函数的指针:

请看蛋疼菊紧的玩意儿:

int ( *ff ( int ) ) ( int* , int );

问题来啦:

挖掘机学校到底哪家强??

不是,那个。。错了,正确的问题是:上面的一坨返回的是啥?

我们来分析一下:

将ff声明为一个函数,它带有一个int型的形参,该函数返回的东西是:int (*) ( int*, int );

这是一个指向函数的指针,所指向的函数返回int型并带有两个分别是int*型和int型的形参

将其改写成如下形式:

typedef int ( *PF ) ( int* ,int );

PF ff ( int ); 

 

浅谈指向函数的指针和指针函数