由上篇博客可知,数组指针~指针~指向数组~存放的是数组地址
函数指针可以类比数组指针。指针~指向函数~存放的是函数地址
一、函数指针的书写:
1、设pf是专门用来存放函数地址的,pf就是函数指针变量。先*pf告诉你我这个是个指针。
2、函数有形参,根据形参类型写。(*pf)(int,int)
3、最后一个写函数的返回类型。如:int(*pf)(int ,int);
这样我们就写好了一个函数指针。通过这个指针,我们可以找到对应的函数并且使用它。
学习函数指针最好能与前面的数组指针结合起来。
数组指针存放数组书写格式:int(*p1)[10]=&arr ;
函数指针存放函数书写格式:int(*p2)(int , int);
要学会类比。注意,小括号一定不能省略,这个小括号的存在使得p1,p2优先和前面的*结合,意在告诉你这是个指针变量。如果没有这个小括号,它会和后面的结合p1[10],p2{int , int} ,这里p1,p2就成了数组名和函数名了。然后那个*会和前面的int结合,告诉你返回类型是个int*。
二、函数指针解析:
int (*pf3) (int , int )
| | |
| | pf3指向函数的参数类型和个数交代
| 函数指针变量名
pf3指向函数的返回类型
三、函数指针的运用
这里需要结合我们之前学的函数调用的知识。函数名的调用实际上就是给参数给函数让它自己算出来然后传回来给你。这个里我们用新知识来实现也就是函数指针调用。
代码示例:
通过函数指针变量我们也能去调用函数。如果函数不需要传参那么你就不用给它参数,如果函数类型是void,不会返回值给你,那在函数指针调用时你就不用写那个int,根据实际情况来写就行。
升级代码:由一开始我们提到的函数名就是函数地址,这里我们是不是可以考虑不需要解引用直接写函数指针变量来调用这个函数,即int d=p1(1,4)
最后让我们欣赏一下一段奇怪的代码: