c++函数指针备忘
语法
返回值 (*指针名) (参数列表)
例:
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测试一下typedef int(*Func)(int a, int b);
int main()
{
Func fn = add;
add(1, 2);
return 0;
}
可以运行
我们也可以直接赋值并运行:(void(*)(void))eip()
。这条语句前面是一个void(*)(void)的函数指针,它的值是eip.后面的括号表示运行它
函数指针在类中的使用
我们是不可以直接用函数指针指向类中的函数的,因为成员函数在创建时会隐式添加一个this参数。
typedef int(Adder::* Fm)(int a, int b); |
但是这样的话这个指针就只可以指向这一个类中的函数了,也就失去了函数指针的优势。
我们可以通过重载()运算符实现多个函数之间使用。
class Adder { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment