在c中,函数名,代表函数的首址...
直接可以用int (*p)( )=f; //f为一个非类的普通函数
调用函数时也可以直接:p( )或(*P)()。
而在C++类中的类函数,定义指向函数的指针时必须加&,如:
int (point::*function_p)( )=&point::getx;//point 为类,getx为类中函数
使用函数时也必须用:(p1.*function_p)( ); ???不理解
直接可以用int (*p)( )=f; //f为一个非类的普通函数
调用函数时也可以直接:p( )或(*P)()。
而在C++类中的类函数,定义指向函数的指针时必须加&,如:
int (point::*function_p)( )=&point::getx;//point 为类,getx为类中函数
使用函数时也必须用:(p1.*function_p)( ); ???不理解
在C + +成员函数有一个隐含的参数,它指向对象(内部成员函数的this指针)。普通C函数和成员函数有不同的函数调用约定,所以他们的指针类型(成员函数指针与普通函数指针)是不同的,不相容的。C + +中引入了新的指针类型,称为成员指针,它只能供一个实例对象调用。
注意: 不要试图强制转换成员函数指针为普通函数指针,结果是不确定的,可能是灾难性的。
From Marshall Cline's C++ FAQ Lite document, www.parashift.com/c++-faq-lite/
C 函数的指针与 C++ 函数的指针具有不同的类型,不能将 C 函数的指针初始化或赋值为 C++ 函数的指针(反之亦然)。
在这种不匹配的时候,会给出编译时错误:
void (*pf1)(int); // points to a C++ function
extern "C" void (*pf2)(int); // points to a C function
pf1 = pf2; // error: pf1 and pf2 have different types
转自:prime C++