导读:
“指向函数的指针”既然是指针,当然也就是变量喽,它也可以作为参数在函数调用中传递,还可以作为函数的返回值。不过使用起来比指向变量的指针要复杂一点。
理解了“指向函数的指针”的声明,就不难理解将这个声明放入另一个函数的声明中,作为该函数(即“另一个函数”)的一个参数或返回值。比如:
//假定int Bigger(int)和int Smaller(int)已经声明
//请参照上文《指向函数的指针二》
void CallByPoint(int i, int (*pFun)(int))
{
cout << pFun(i) << endl;//或写为:(*pFun)(i)
}
有了以上这个CallByPoint函数,就可以直接将一个函数名作为参数传递进去了。如:
int t = 5;
CallByPoint(t, &Bigger);//可以,第二个参数是取函数地址
CallByPoint(t, Bigger);//也可以,第二个参数省略了&符
上文提到过用typedef来简化这种指针的声明,如果用了typedef,那么一切都可以变得更简单些,上面的CallByPoint函数可以作以下简化:
typedef int (*cmpFun)(int);//定义一个别名
void CallByPoint(int i, cmpFun pFun);//简化了第二个参数的类型说明
将指向函数的指针用于函数的返回值比用于参数更复杂一些。下文详述这种程序的编写。
本文转自
http://toumao.blog.sohu.com/12866357.html
“指向函数的指针”既然是指针,当然也就是变量喽,它也可以作为参数在函数调用中传递,还可以作为函数的返回值。不过使用起来比指向变量的指针要复杂一点。
理解了“指向函数的指针”的声明,就不难理解将这个声明放入另一个函数的声明中,作为该函数(即“另一个函数”)的一个参数或返回值。比如:
//假定int Bigger(int)和int Smaller(int)已经声明
//请参照上文《指向函数的指针二》
void CallByPoint(int i, int (*pFun)(int))
{
cout << pFun(i) << endl;//或写为:(*pFun)(i)
}
有了以上这个CallByPoint函数,就可以直接将一个函数名作为参数传递进去了。如:
int t = 5;
CallByPoint(t, &Bigger);//可以,第二个参数是取函数地址
CallByPoint(t, Bigger);//也可以,第二个参数省略了&符
上文提到过用typedef来简化这种指针的声明,如果用了typedef,那么一切都可以变得更简单些,上面的CallByPoint函数可以作以下简化:
typedef int (*cmpFun)(int);//定义一个别名
void CallByPoint(int i, cmpFun pFun);//简化了第二个参数的类型说明
将指向函数的指针用于函数的返回值比用于参数更复杂一些。下文详述这种程序的编写。
本文转自
http://toumao.blog.sohu.com/12866357.html