📅  最后修改于: 2023-12-03 14:59:44.910000             🧑  作者: Mango
在C++中,函数指针是一个指向函数的指针变量。它是一个存储函数入口地址的变量,可以用于调用函数。
函数指针变量的声明格式如下所示:
return_type (*pointer_name)(type1, type2, ..., typeN);
其中return_type
是指函数的返回类型,pointer_name
是指针变量的名称,type1, type2, ..., typeN
是函数的参数类型。
例如,声明一个指向返回int
类型,以int
和double
为参数类型的函数指针变量,可以如下所示:
int (*ptr)(int, double);
这些声明中的圆括号是必需的,因为函数名具有更高的优先级。
函数指针可以使用函数名进行初始化,如下所示:
int add(int a, double b){
return a + b;
}
int (*ptr)(int, double) = &add;
以上语句将函数add
的地址赋值给函数指针ptr
。
也可以不使用&
符号,如下所示:
int (*ptr)(int, double) = add;
这与使用&
符号是等效的。
定义了函数指针之后,可以使用*
符号来调用函数,如下所示:
int result = (*ptr)(5, 3.2);
也可以省略*
符号,如下所示:
int result = ptr(5, 3.2);
这与使用*
符号是等效的。
函数指针可以作为函数参数,例如:
void useFuncPtr(int (*ptr)(int, double), int a, double b){
int result = (*ptr)(a, b);
cout << "Result: " << result << endl;
}
int main(){
useFuncPtr(&add, 5, 3.2);
return 0;
}
在上述代码中,useFuncPtr
函数接受一个类型为int (*ptr)(int, double)
的参数,即一个函数指针。在函数内部,利用函数指针调用函数add
。
可以使用typedef
来简化函数指针类型的声明,如下所示:
typedef int (*funcPtr)(int, double);
int add(int a, double b){
return a + b;
}
void useFuncPtr(funcPtr ptr, int a, double b){
int result = (*ptr)(a, b);
cout << "Result: " << result << endl;
}
int main(){
funcPtr ptr = add;
useFuncPtr(ptr, 5, 3.2);
return 0;
}
以上代码中,将int (*funcPtr)(int, double)
定义为一个类型别名,在调用函数指针时,直接使用该类型别名即可,避免了过长的函数指针类型声明。
函数指针在C++中是非常有用的工具,可以用来实现回调函数、函数参数动态绑定等功能。掌握了函数指针的使用方式,可以更加灵活地使用C++语言。