学科分类
目录
C语言

函数指针

由前面章节的学习可知,定义一个函数,函数代码会存储在代码区一块内存空间中,由函数名记录这块内存空间的起始地址。既然函数存储空间有地址编号,那么就可以定义一个指针指向存放函数代码的存储空间,这样的指针叫做函数指针。

函数指针的定义格式如下:

返回值类型 (*变量名)(参数列表)

在上述格式中,返回值类型表示指针指向的函数的返回值类型,“”表示这是一个指针变量,参数列表表示该指针所指函数的参数列表。需要注意的是,由于优先级的关系,“变量名”要用圆括号括起来。

假设定义一个参数列表为两个int类型变量,返回值类型为int的函数指针,则其定义如下:

int (*p)(int,int);     //定义一个函数指针变量p

上述代码定义了函数指针变量p,该指针变量只能指向返回值类型为int且有两个int类型参数的函数。在程序中,可以将函数的地址(即函数名)赋值给该指针变量,但要注意,函数指针的类型应与它所指向的函数原型相同,即函数必须有两个int类型的参数,且返回一个int类型的数据,假设有一个函数func(),其声明格式如下:

int func(int a,int b);

可以使用上面定义的函数指针指向该函数,即使用该函数的地址为函数指针赋值,赋值代码如下所示:

p=func;

由此也可以看出,函数名类似于数组名,也是一个指针。如果有函数声明如下:

int func1(char ch);

则p=func1的赋值是错误的,因为函数指针p与func1()函数参数类型不匹配。

函数指针的调用方式与函数名类似,将函数名替换为指针名即可。假设要调用指针p指向的函数,其形式如下:

p(3,5);

上述代码与func(3,5)的效果相同。需要注意是的,函数指针不能进行算术运算,如p+n、p++、--p等,这些运算是无意义的。

点击此处
隐藏目录