什么是函数指针呢
我们在编写程序的时候,往往需要自定义某个函数实现某个功能,在编译时系统就会为这个函数代码分配一段存储空间,而这段存储空间的首地址就是这个函数的地址。而函数名就是代表着函数的地址。因此,存放函数地址的指针变量成为函数指针变量,简称函数指针。
函数指针的定义方式为:
函数返回值类型 (*指针变量名)(函数参数列表);
举个例子:
int(*p)(int, int);
这个代码表示,这里定义了一个指针变量p,该指针指向的是一个返回类型为int型的函数,并且该函数有两个int型的参数变量。指针变量p类型为int(* )(int ,int)。
这里需要注意的是,*p两端的括号不能去掉,因为括号改变了运算符的优先级。
又是指针变量又是函数指针的,好烦,应该怎么区分呢?
看到变量定义时,先看看这个变量前有没有*号,如果有就是指针变量(函数指针也是指针变量),那我们怎么再进一步区分是普通变量指针还是函数指针呢?我们要知道函数需要参数列表,我们观察变量名后面有无带有形参类型的括号,如果有就是函数指针,没有就是普通的变量指针。
需要注意的是:函数指针没有指针变量++和--运算。
那我们怎么使用函数指针调用函数呢?
举个例子
int Func(int x); // 先声明一个函数
int (*p)(int); // 函数指针的定义
p = Func; // 将函数Func的首地址赋值给指针变量p‘
int b = x; // 定义一个int型的变量
int a = (*p)(b); // a用于接收函数调用的返回值
上面的代码就实现了利用函数指针实现了Func函数的调用。