先举一个用函数指针调用函数的例子
int Func(int x); /*声明一个函数*/
int (*p) (int x); /*定义一个函数指针*/
p = Func; /*将Func函数的首地址赋给指针变量p*/
int Func(int x);
这一句是声明一个函数,是我们要被函数指针调用的函数,而且函数名表示函数的首地址。
int (*p) (int x);
这里定义了一个函数指针,int (*p) (int x); 里的int指的是函数的返回值,指要被调用的函数的返回值是整形。
int (*p) (int x); 里的*P指的是指向函数首地址的指针变量。
int (*p) (int x); int x表示被调用的函数参数是一个且是整形。
p = Func;
这一句是把被调函数的首地址存在定义的指针变量里,用来指向被调函数。
定义的函数指针和声明的函数一一对应,对照着看会很清晰。
举一个完整实用简单的例子来帮助理解
# include <stdio.h>
int Max(int, int); //函数声明
int main(void)
{
int(*p)(int, int); //定义一个函数指针
int a, b, c;
p = Max; //把函数Max赋给指针变量p, 使p指向Max函数
printf("please enter a and b:");
scanf("%d%d", &a, &b);
c = (*p)(a, b); //通过函数指针调用Max函数
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:5 6
a = 5
b = 6
max = 6