1、什么是函数指针
如果对于C语言掌握程度较好的话,那么应该知道我们在程序中定义的变量,系统会为其开辟一块存储空间,而我们通过取地址符就可以获取到这一个变量所在的地址。
对于数组来讲,它的数组名就表示了数组的首地址。
那么同样的,对于我们的函数来讲,我们的系统会为我们的函数代码分配一块存储空间,函数名称就表示了这块存储空间的首地址,那么既然有地址,我们自然可以通过指针来指向这个函数。
2、函数指针的格式
对于普通的指针,我们知道根据不同的数据类型,指针的类型也要匹配,那么对于函数来说,我们应该怎么定义与之匹配的指针呢?
函数指针主要由三部分组成:
- 函数的返回值类型
- 指针名称
- 函数的入口参数
来看一个示例
int (*p)(int,int);
这里我们定义了一个函数指针 - 指针指向的函数的返回值类型为 int ,由第一个int 表示
- 指针的名称为 p
- 指针指向的函数的入口参数为两个 int 参数,由后面的两个 int 确定。
3、函数指针的辨析
我们来看一种同函数指针极为相似的结构
void *pfun();
我们先确认一点,这个并不是函数指针
为什么不是?
pfun
先和()
结合,这属于函数声明。
4、函数指针数组
用途——转移表
定义int (*parr[10])()
这个相当于定义了10个int (*parr)()
指针
使用示例
#include<stdio.h>
int add(int a, int b)
{
return a + b;
}
int