一、函数的指针
首先,函数名代表函数的起始地址,调用函数时,程序会从函数名获取到函数起始地址,并从该地址起执行函数中的代码,函数名就是函数的指针,所以我们可以定义一个指向函数的指针变量,用来存放函数的起始地址,这样一来,就可以通过该变量来调用其所指向的函数。
二、指向函数的指针变量
-
定义指向函数的指针变量
返回值类型(* 指针变量名)(形参类型列表);
例如:int(*p)(int, int);
,这行代码定义了一个可以指向返回值为整型且有两个整型形参函数的指针变量p
,符合返回值为整型且有两个整型形参的函数都可以将其地址(即其函数名)赋给p
。 -
使用指向函数的指针变量
在使用指向函数的指针变量时,只需要将函数名赋给指向函数的指针变量即可,因为函数名就是该函数的入口地址。
由于指向函数的指针变量保存了函数的地址,则该指针变量就指向了对应的函数。例如,求最大值的函数命名为max
,如果将其函数名赋给指向函数的指针变量p
(即p = max
)后,则p
就指向了max
函数,并且可以通过(*p)(a, b);
的方式来调用max
函数,因为指针变量p
保存了max
函数的地址,那么*p
就是max
。需要注意的是,其中*p
前的*
可以省略,故也可以写成p(a, b);
三、调用函数的两种方式
- 引例:自定义
max
函数,求整数a
和b
中的较大者并返回给主调函数,不考虑两数相等的情况 - 通过函数名调用函数
#include <stdio.h>
int max(int, int); // max函数的函数声明
int main()
{
int a, b;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
printf("两数中的较大者的值为%d\n", max(a, b));
return 0;
}
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
- 通过指向函数的指针变量调用函数
#include <stdio.h>
int max(int, int);