什么是函数指针?
首先要知道函数指针本质上就是一个指针,既然是指针,那么就得存放地址,整型指针存放的是整型变量的地址,数组指针存放的是数组的地址,那么我们就可以推出函数指针就是来存放函数的地址的。
函数名与&函数名是什么关系?
![](https://i-blog.csdnimg.cn/blog_migrate/4e8d4e8c0ed8b3f721e8a1bf0edc482a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc322a2008eb0b94154a0008d1590e62.png)
这里我来打印一下函数的地址,一个是&test,一个是test。
我们发现是一样的,是不是和数组很像,但他们还是有区别的。
数组名是首元素的地址,而取地址数组名则是整个数组的地址。
而函数名和取地址函数名是等价的。
数组名!=&数组名
函数名==&函数名
函数指针的写法
假设有一个函数int Add(int x, int y),我们要把Add的地址存到pf中。
int (*pf)(int , int)=Add
这就是函数指针的写法,
![](https://i-blog.csdnimg.cn/blog_migrate/997630984a6b713c0aaa98be8e00025e.png)
是不是和数组指针很像。
函数指针的用法
我们要把Add函数的返回值放到变量ret中
![](https://i-blog.csdnimg.cn/blog_migrate/35c73badbb90ca83638f6393b897e347.png)
运行后,两种写法得出的答案是一样的,因为函数名本身就是函数的地址,所以这里Add和pf是等价的,可以直接调用,那么第二种(*pf)的写法可以说是多此一举。