目录
(一)说明
(1)函数名代表函数的起始地址。调用函数时,从函数名得到函数的起始地址,并执行函数代码。
(2)函数名就是函数的指针,它代表函数的起始地址。
(3)可以定义一个指向函数的指针变量,用来存放某一函数的起始地址。
Eg
int(*p)(int,int);
定义p是一个指向函数的指针变量,它可以指向函数类型为整型且有两个整型参数的函数。此时,指针变量p的类型用int(*)(int,int)表示。
(二)用函数指针变量调用函数
(1)简介
如果想调用一个函数,除了可以通过函数名调用以外,还可以通过指向函数的指针变量
来调用该函数
(2)举例
要求
用函数求整数a和b中的大者。
代码
#include <stdio.h>
int main()
{
int max(int,int); //函数声明
int (*p)(int,int);
int a,b,c;
p=max;
printf("please enter a and b:");
scanf("%d%d",&a,&b);
c=(*p)(a,b); //通过函数名调用 max函数 相当于c=max(a,b);
printf("a=%d\nb=%d\nmax=%d\n",a,b,c);
return 0;
}
int max(int x,int y) //定义 max 函数
{
int z;
if(x>y)z=x;
else z=y;
return(z);
}
/*输出结果*/
please enter a and b:58 99
a=58
b=99
max=99
注意事项
① 注意*p两侧的括号不可省略,表示p先与 * 结合,是指针变量,然后再与后面的( )结合,()表示是函数,即该指针变量不是指向一般的变量,而是指向函数。如果写成“int *p(int,int);”,由于()优先级高于*,它相当于“int *(p(int,int))”,就成了声明一个p函数了(这个函数的返回值是指向整型变量的指针)。
② 赋值语句“p=max”的作用是将函数 max的入口地址赋给指针变量p。
③ p就是指向函数 max的指针变量,此时p和 max都指向函数的开头。
④ p是指向函数的指针变量,它只能指向函数的入口处而不可能指向函数中间的某一条指令
处,因此不能用*(p+1)来表示函数的下一条指令。