c++函数指针备忘
本文最后更新于 2020年12月20日 下午
语法
返回值 (*指针名) (参数列表)
例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int add(int x, int y)
{
return x + y;
}
int main()
{
int (*func)(int a, int b);
func = add;
cout<< add(1, 2) << endl;
}
输出: 3
这里将add的函数首地址传给了这个函数指针,现在这个指针就指代这个函数,传入参数就可以使这个函数执行。
注意:int(*)(int a, int b)是一个函数指针类型,和int,double类似。而func相当与int a的a。
根据上面这一条,我们可以用typedef测试一下1
2
3
4
5
6
7
8typedef int(*Func)(int a, int b);
int main()
{
Func fn = add;
add(1, 2);
return 0;
}
可以运行
我们也可以直接赋值并运行:(void(*)(void))eip()。这条语句前面是一个void(*)(void)的函数指针,它的值是eip.后面的括号表示运行它
函数指针在类中的使用
我们是不可以直接用函数指针指向类中的函数的,因为成员函数在创建时会隐式添加一个this参数。
1 | |
但是这样的话这个指针就只可以指向这一个类中的函数了,也就失去了函数指针的优势。
我们可以通过重载()运算符实现多个函数之间使用。
1 | |
c++函数指针备忘
https://www.xinhecuican.tech/post/9954ba8e.html