返回值 (*funPtr)(参数列表);
将一个函数的地址初始化或赋值给一个指向函数的指针时,无需显示地取得函数地址,编译器知道隐式的获得函数的地址。因此&通常省略不用。
类似地,为了调用函数指针所指向的函数而对指针进行解引用操作也是不必要的,编译器可以帮助你解引用。
eg.
void (*fp) (int);
extern void h (int);
fp = h; // ok
fp = &h; //ok
(*fp)(12);
fp(12);
Note:非静态的成员函数的地址不是一个指针,因此不可以将一个函数指针指向一个非静态成员函数。
函数指针最常用来作为回调机制。标准库中,好几个地方使用了回调机制,最突出的就是被set_new_handler用于设置回调。当全局operator new函数无法履行一个内存分配请求时,该回调函数即被调用。
eg.
void begForgiveness()
{logError(“Sorry!”);
throw std::bad_alloc();
}
std::new_handler oldHandler = std::set_new_handler(begForgiveness);
//标准类型名称new_handler 是一个typedef:
typedef void (* new_handler)();