函数指针
: 所谓函数指针, 就是指向函数的指针
一. 声明方式
函数指针"类型"声明
typedef void (*fp)(int, int)
= typedef 返回类型
(*类型名称
)(参数...
)
举例:
void test(int x, int y)
{
cout << x << ',' << y << endl;
}
int main() {
// 函数指针"类型"的声明
typedef void (*fp)(int, int);
// 用类型去声明一个变量
fp p1 = test;
// 变量初始化
p1(1, 2);
}
函数指针"变量"声明
void test(int x, int y)
{
cout << x << ',' << y << endl;
}
int main() {
//函数指针变量p2声明
void(*p2)(int, int);
// 初始化
p2 = test;
p2(3, 4);
//函数指针变量p3声明并初始化
void (*p3)(int, int) = test;
p3(5, 6);
}
二. 使用方式
除了上面的直接声明使用, 大部分其实按照下列方法使用
作为函数参数
作为函数参数, 可以用作回调, 或者sort
方法中的比较函数, 或者其他意想不到的用法
// 作为参数
void assign_vector(vector<int>& v, int (*p)())
{
for (int i = 0; i < v.size(); i++)
{
v[i] = p();
}
}
int get_rand()
{
return rand();
}
int main() {
vector<int> data = vector<int>(10, 1);
assign_vector(data, get_rand);
for (int v : data)
cout << v << endl;
}
作为函数返回值
typedef void (*FUNC)(int, int);
FUNC get_func()
{
return [](int x, int y) -> void{
cout << "x = " << x << ", y = " << y << endl;
};
}
int main() {
FUNC f = get_func();
f(7, 8);
}