阔别多日,也是重新写上了文章,今天跟大家分享一下我对于函数指针的一些看法
一 定义
函数指针是指向函数的指针变量。它存储了函数的地址,可以通过函数指针调用函数,实现对函数的间接调用。函数指针的定义与普通指针类似,使用星号(*)来声明一个指向函数的指针变量。函数指针的类型由它所指向的函数的返回值类型和参数类型决定。这个是标准定义,我们不需要知道,首先我们可以做个类比,数组名表示的是数组首元素地址,那单独的函数名表示函数所在的地址,数组可以数组名+[ ]进行访问,也就是地址+[ ],那么函数也可以通过函数的地址+( )进行访问所以函数指针就是指向函数的指针,我们可以通过函数地址 + ( )的形式来进行调用
二 使用
现在我们知道了有函数指针这个东西,并且知道了我们可以通过函数指针来调用函数,那么我们应该如何定义一个指针呢,请看如下代码
int Add (int x, int y)
{
return x + y;
}
现在我们定义了一个Add函数,可以实现整形的加法,其返回值是int,两个参数也都是int,那么这个Add函数的函数指针就应该这样声明
int Add (int x, int y)
{
return x + y;
}
int main()
{
int(*p)(int, int) = Add;
return 0;
}
*表示p是一个指针,()我们知道是函数调用操作符,所以这里(*p)()表示*p是一个函数,(*p)
(int, int)表示调用的函数有两个参数, 都是int类型,int(*p)(int, int)这个int表示指针所指向的函数是int类型,那么现在我们就定义好了我们的函数指针p指向函数Add,那么我们如何使用p指针来调用Add函数呢,请看如下代码
int Add ()
{
return x + y;
}
int main()
{
int(*p)(int, int) = Add;
int ret1 = (*P)(2, 3);
int ret2 = p(2, 3);
return 0;
}
ret1 = 2 + 3 = 5, ret2 = 2 + 3 = 5,从这里我们就可以看到我们有两种方式来实现函数指针调用函数,一种就是(* + 函数指针)+(函数所需参数), 另一种是函数指针+(函数所需参数),这两种方法是完全等价的, 那么现在我们也已经知道如何使用函数指针调用函数了,那么肯定有朋友会有疑问,我直接调用函数不也一样吗,为什么要搞个函数指针出来多此一举?这个就是下一篇文章解决的东西,函数指针的应用,敬请期待。
十分感谢能读到这里的朋友,望共勉!