int (*pf)( const string &, const string & ); // 正确
如上,声明了一个函数指针,注意的是,解引用操作符* 应与返回类型关联所以在这种情况下是与类型名int 关联而不是pf 要想让解引用操作符与pf 关联,所以括号是必需的
#include
int lexicoCompare( const string &s1, const string &s2 ) {
return s1.compare(s2);
}
int (*pfi)( const string &, const string & ) = lexicoCompare;//初始化
pfi = lexicoCompare;//赋值
在指向函数类型的指针之间不存在隐式类型转。也就是,只有当赋值操作符左边指针的参数表和返回类型与右边函数或指针的参数表和返回类型完全匹配时初始化和赋值才是正确的如果不匹配则将产生编译错误消息。
#include
using namespace std;
void estimate(int lines, double (*pf)(int));
double rick(int lines);
int main(void) {
int code;
cout << "Enter the money:";
cin >> code;
estimate(code, rick/*计算lines时间的函数*/);
return 0;
}
void estimate(int lines, double (*pf)(int)/*指向执行函数的地址*/) {
cout << "Lines code will take time:" << (*pf)(lines) << endl;
}
double rick(int lines) {
return lines*0.05;
}
#include
#include
using namespace std;
int func1(int a, int b) {
return a + b;
}
int func2(int a, int b) {
return a - b;
}
int func3(int a, int b) {
return a * b;
}
int func4(int a, int b) {
return a / b;
}
void Compute(int a, int b, int(*p)(int, int)) {
cout << p(a, b) << endl;
}
int main() {
int i = 5, j = 10;
// decltype,在C++中,作为操作符,用于查询表达式的数据类型。decltype在C++11标准制定时引入,主要是为泛型编程而设计
decltype(func1) *p1 = func1, *p2 = func2, *p3 = func3, *p4 = func4;
vector vF = { p1,p2,p3,p4 };
for (auto p : vF)
{
Compute(i, j, p);
}
system("pause");
return 0;
}
指针变量名 = &类名::成员函数名;
定义的函数指针变量,指向了一个类中的一个函数。但是,当一个类实例化为多个对象的时候,调用函数指针的时候,就必须指定哪一个对象。
#include
#include
#include
using namespace std;
class student{
char name[32];
char addr[32];
long long number;
student(char *pn,char *pa,long long n){
strcpy(name,pn);
strcpy(addr,pa);
number = n;
}
void print(){
cout <<"name = "<