函数指针
: 所谓函数指针, 就是指向函数的指针
一. 声明方式
函数指针"类型"声明
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);
}