📜  c++ fonksion 指针 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:44.910000             🧑  作者: Mango

C++函数指针

在C++中,函数指针是一个指向函数的指针变量。它是一个存储函数入口地址的变量,可以用于调用函数。

声明函数指针

函数指针变量的声明格式如下所示:

return_type (*pointer_name)(type1, type2, ..., typeN);

其中return_type是指函数的返回类型,pointer_name是指针变量的名称,type1, type2, ..., typeN是函数的参数类型。

例如,声明一个指向返回int类型,以intdouble为参数类型的函数指针变量,可以如下所示:

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来简化函数指针类型的声明,如下所示:

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++语言。